[nycphp-talk] Transforming XML with XSL (XsltProcessor problems)
Ben Sgro
ben at projectskyline.com
Wed Mar 11 15:13:54 EDT 2009
Hey Joelle,
Thanks - care to share the class?
I'll reconsider the XSL - thanks.
- Ben
Joelle Tegwen wrote:
> Yeah, I've found this to be fairly cumbersome. I use it a lot so I
> wrote a class that wraps this functionality. I can pass in any kind of
> xml (DomDocument, SimpleXMLElement, string, file locaiton, etc) and it
> just handles it all for me.
>
> BTW - unless you need it // is relatively expensive in xslt. You
> should use relative paths whenever possible.
>
> Glad you figured it out.
> Joelle
>
> Ben Sgro wrote:
>> Thanks for the feedback
>>
>> The error was super simple:
>>
>> $xml = new DOMDocument;
>> $xml->loadXML($this->_payload);
>>
>> $xsl = new DOMDocument;
>> $xsl->load($this->_filePath);
>>
>> $proc = new XSLTProcessor;
>> $proc->importStyleSheet($xsl);
>> return $proc->transformToXML($xml); I was calling
>> load(STRING) vs loadXML(STRING), so when it attempting to transform
>> the XML, it (the dom doc) was empty - it didn't load the xml string
>> data.
>> Too bad it doesn't throw an error or exception if an argument is
>> incorrect.
>>
>> - Ben
>>
>> Joelle Tegwen wrote:
>>> This worked for me. PHP 5.2.6-2ubuntu4.1 with Suhosin-Patch 0.9.6.2
>>>
>>> $xml =<<<XML
>>> <ProfileRequest templateId="1" submitUser="asdf"
>>> submitDateTime="2009-01-12T17:32:46">
>>> <DataItem name="AccountNumber" value="600978"/>
>>> </ProfileRequest>
>>> XML;
>>>
>>> $xsl =<<<XSL
>>> <xsl:stylesheet
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
>>> xmlns="http://www.w3.org/1999/xhtml">
>>> <xsl:template match="/ProfileRequest">
>>> <Data>
>>> <AccountNumber>
>>> <xsl:value-of select="DataItem[@name='AccountNumber']/@value"/>
>>> </AccountNumber>
>>> </Data>
>>> </xsl:template>
>>> </xsl:stylesheet>
>>> XSL;
>>>
>>>
>>> Ben Sgro wrote:
>>>> Hello,
>>>>
>>>> My PHP code is:
>>>> ---------------------
>>>>
>>>> $xml = new DOMDocument;
>>>> $xml->load($this->_payload); $xsltProcessor =
>>>> new XsltProcessor();
>>>> $xsl = new DomDocument;
>>>> $xsl->load('../lib/Transformations/text.xsl');
>>>> $xsltProcessor->importStylesheet($xsl);
>>>> $result = $xsltProcessor->transformToXml($xml);
>>>> return $result;
>>>>
>>>>
>>>> My XSL is:
>>>> --------------
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>> <xsl:stylesheet
>>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
>>>> xmlns="http://www.w3.org/1999/xhtml"
>>>> >
>>>> <xsl:template match="/">
>>>> <xsl:element name="Data">
>>>> <xsl:element name="AccountNumber"><xsl:value-of
>>>> select="//DataItem[@name='AccountNumber']/@value"/>
>>>> </xsl:element>
>>>> </xsl:element>
>>>> </xsl:template>
>>>> </xsl:stylesheet>
>>>>
>>>>
>>>> And my XML is:
>>>> ---------------------
>>>>
>>>> <ProfileRequest templateId="1" submitUser="asdf"
>>>> submitDateTime="2009-01-12T17:32:46">
>>>> <DataItem name="AccountNumber" value="600978"/>
>>>> </ProfileRequest>
>>>>
>>>>
>>>>
>>>> The $result is:
>>>> -----------------
>>>>
>>>> <?xml version="1.0"?>
>>>> <Data
>>>> xmlns="http://www.w3.org/1999/xhtml"><AccountNumber></AccountNumber></Data>
>>>>
>>>>
>>>> So, as you can see the AccountNumber is missing. This XSL/XML works
>>>> fine in Author (XML Tool).
>>>> Any ideas why this would fail? Also, the Xpath
>>>> (//DataItem[@name='AccountNumber']/@value) works
>>>> if I make the XML a simpleXML object and call xpath on it.
>>>>
>>>> Thanks for your help!
>>>>
>>>> - Ben
>>>> _______________________________________________
>>>> New York PHP User Group Community Talk Mailing List
>>>> http://lists.nyphp.org/mailman/listinfo/talk
>>>>
>>>> http://www.nyphp.org/show_participation.php
>>>>
>>> _______________________________________________
>>> New York PHP User Group Community Talk Mailing List
>>> http://lists.nyphp.org/mailman/listinfo/talk
>>>
>>> http://www.nyphp.org/show_participation.php
>>>
>> _______________________________________________
>> New York PHP User Group Community Talk Mailing List
>> http://lists.nyphp.org/mailman/listinfo/talk
>>
>> http://www.nyphp.org/show_participation.php
>>
> _______________________________________________
> New York PHP User Group Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> http://www.nyphp.org/show_participation.php
>
More information about the talk
mailing list