Проблем при парсване на XML чрез PHP и XSLT

Статус
Not open for further replies.

emagi

Registered
Здравейте!
Чрез PHP и SOAP изпращам заявка към WebService, като получавам следния response:
HTML:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:foundUser xmlns:ns2="http://services.blabla.bg">
            <return>
                <id>99</id>
                <anrede><![CDATA[Mister]]></anrede>
                <title><![CDATA[Dr.]]></title>
                <name><![CDATA[Stefanow]]></name>
                <vorname><![CDATA[Stefan]]></vorname>
                <passwort><![CDATA[FJRdfdJjg]]></passwort>
                <metaData>
                    <meta>
                        <id>2</id>
                        <type>100</type>
                        <value>stefan.stafanow@abv.bg</value>
                    </meta>
                    <meta>
                        <crdate>1322608871291</crdate>
                        <id>1</id>
                        <type>101</type>
                    </meta>
                    <meta>
                        <id>3</id>
                        <type>3</type>
                        <value>stefan.stafanow@abv.bg</value>
                    </meta>
                </metaData>
                <messages/>
                <comments/>
                <memberOf/>
                <adminOf/>
                <superUserOf/>
                <employeeOfCompanies/>
                <ownerOf/>
                <bookmarkedOffers/>
                <bookmarkedCompanies/>
                <purchasedOffers/>
                <companiesOffer/>
            </return>
        </ns2:foundUser>
    </soap:Body>
</soap:Envelope>

Чрез PHP и XSLT се опитвам, да "поизчистя" respons-a, като искам следната структура:
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>99</id>
<anrede><![CDATA[Mister]]></anrede>
<title>Dr</title>
<name><![CDATA[Stefanow]]></name>
<vorname><![CDATA[Stafanow]]></vorname>
</user>

За целта ползвам следния XSLT скрипт:
HTML:
<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" omit-xml-declaration = "no" encoding="UTF-8" media-type="text/xml" />
    <xsl:strip-space elements="*"/>
    <xsl:template match="return">
        <user>
            <id>
                <xsl:value-of select="id" />
            </id>
            <anrede>
                <xsl:value-of select="anrede" />
            </anrede>
            <title>
                <xsl:value-of select="title" /> 
            </title>
            <name>
                <xsl:value-of select="name" />
            </name>
            <vorname>
                <xsl:value-of select="vorname" />
            </vorname>
        </user>
    </xsl:template>
</xsl:stylesheet>

Ползвам NET Beans и като опитам чрез програмата да трансформирам XML файла, се получава, това което искам. Въпроса е, че когато опитам чрез PHP:
PHP:
private function TransformXml($xmlFile, $xsltFile)
    {
        $xml = new DOMDocument;
        $xml->load($xmlFile);
        
        $xsl = new DOMDocument;
        $xsl->load($xsltFile);

      // Configure the transformer
        $proc = new XSLTProcessor;
        $proc->importStyleSheet($xsl); // attach the xsl rules
        return $proc->transformToXML($xml);
    }
ми дава следната грешка:
XML Parsing Error: no element found
Location: http://localhost/oop/UserService.php
Line Number 1, Column 1:
^
Реалноактич това е грешка, поради факта че нямам начален таг...
Някой има ли идеи, къде греша?
 
При мен това дето си постнал работи. Направих 2та xml файла, дадох ги на функцията и ми изплюва правилния резултат.

Виж където я ползваш дали подаваш правилните неща.
 
Да, проблем ми беше, че подавах mock обект, вместо това, което трябва. За труда и времето, което си взе +1
Мерси!
 
Статус
Not open for further replies.

Back
Горе