Разбор XML, xpath не будет работать - PullRequest
0 голосов
/ 08 сентября 2011

В настоящее время я работаю с анализом данных из API-ответа (XML), но я не могу разобрать данные. Ранее я с большим успехом анализировал XML-ответы с помощью xpath, но в этом случае он не работает.

Вот мой код:

    $personnr = $_POST['bcpn'];

    //Get string
    $getstring = 'CustomerLoginName=xxxx&UserLoginName=xxx&Password=xxx&Language=xxx&PersonNumber='.$personnr;
    //Target URL
    $url = "https://xxxxx.se/x/xxx.asmx/DataImport2Person?$getstring";
    //Creating Simple XMl Objects
    $xml = new SimpleXMLElement($url, null, true);

А вот ответ XML:

<DataImport2Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.xxx.xxx/xxxx/xxx2">
<Number/>
<Blocks>
<Block>
<Code>PNrStatus</Code>
<Fields>
<Field>
<Code>PNrStatus</Code>
<Value>0</Value>
</Field>
<Field>
<Code>PNrStatusText</Code>
<Value>Registrerat personnummer</Value>
</Field>
</Fields>
</Block>
<Block>
<Code>Fbf</Code>
<Fields>
<Field>
<Code>FinnsIFbf</Code>
<Value>1</Value>
</Field>
<Field>
<Code>FinnsIFbfText</Code>
<Value>Ja</Value>
</Field>
<Field>
<Code>SkyddadMark</Code>
<Value>0</Value>
</Field>
<Field>
<Code>SkyddadMarkText</Code>
<Value>Nej</Value>
</Field>
<Field>
<Code>FbkMark</Code>
<Value>0</Value>
</Field>
<Field>
<Code>FbkMarkText</Code>
<Value/>
</Field>
<Field>
<Code>SparDatum</Code>
<Value>2000-01-01</Value>
</Field>
<Field>
<Code>PNr</Code>
<Value>19590707-1111</Value>
</Field>
<Field>
<Code>FNamn</Code>
<Value>Jan Olof</Value>
</Field>
<Field>
<Code>MNamn</Code>
<Value/>
</Field>
<Field>
<Code>ENamn</Code>
<Value>Håkansson</Value>
</Field>
<Field>
<Code>Coadress</Code>
<Value/>
</Field>
<Field>
<Code>Gatuadress</Code>
<Value>Götgatan</Value>
</Field>
<Field>
<Code>Postnr</Code>
<Value>12639</Value>
</Field>
<Field>
<Code>Postort</Code>
<Value>HÄGERSTEN</Value>
</Field>
<Field>
<Code>TNamn</Code>
<Value>Jan</Value>
</Field>
</Fields>
</Block>
<Block>
<Code>TaxAr1</Code>
<Fields>
<Field>
<Code>TaxAr</Code>
<Value>2010</Value>
</Field>
<Field>
<Code>InkTj</Code>
<Value>211620</Value>
</Field>
<Field>
<Code>InkNarvAkt</Code>
<Value>0</Value>
</Field>
<Field>
<Code>InkNarvPass</Code>
<Value>0</Value>
</Field>
<Field>
<Code>UskNarvAkt</Code>
<Value>0</Value>
</Field>
<Field>
<Code>UskNarvPass</Code>
<Value>0</Value>
</Field>
<Field>
<Code>AllmAvdr</Code>
<Value>5500</Value>
</Field>
<Field>
<Code>TaxForvInk</Code>
<Value>206100</Value>
</Field>
<Field>
<Code>InkKap</Code>
<Value>0</Value>
</Field>
<Field>
<Code>UndKap</Code>
<Value>21908</Value>
</Field>
<Field>
<Code>SamInk</Code>
<Value>184192</Value>
</Field>
<Field>
<Code>SlutSkatt</Code>
<Value>41130</Value>
</Field>
<Field>
<Code>EjFast</Code>
<Value>0</Value>
</Field>
<Field>
<Code>EjFastText</Code>
<Value>Nej</Value>
</Field>
<Field>
<Code>NollTax</Code>
<Value>0</Value>
</Field>
<Field>
<Code>NollTaxText</Code>
<Value>Nej</Value>
</Field>
</Fields>
</Block>
</Blocks>
</DataImport2Result>

Как вы можете видеть, существует много «блоков», в которых находятся данные, идеальным решением для меня был бы массив, в котором было бы написано <code> => <value>.

Буду признателен за любую помощь и предложения.

Всего наилучшего, Куница

1 Ответ

1 голос
/ 08 сентября 2011

Возможно, вам не хватает пространства имен.Все ваши элементы находятся в пространстве имен http://www.xxx.xxx/xxxx/xxx2, поэтому вы должны сначала выполнить эту команду :

$xml->registerXPathNamespace('x', 'http://www.xxx.xxx/xxxx/xxx2');

Затем вы можете обратиться к своим элементам с помощью:

//x:Code
...