解析XML,xpath不会工作

时间:2011-09-08 08:31:13

标签: php simplexml xml-parsing

我目前正在处理来自api-response(xml)的数据解析,但我无法真正解析数据。我之前使用xpath解析了XML repsonses,取得了巨大的成功,但在这种情况下它不起作用。

这是我的代码:

    $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 个答案:

答案 0 :(得分:1)

您可能错过了命名空间。您的所有元素都在http://www.xxx.xxx/xxxx/xxx2命名空间中,因此您必须先发布this command

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

然后你可以用:

来解决你的元素
//x:Code