2011-09-08 53 views
0

我目前正在解析api-response(xml)中的數據,但我無法真正解析數據。我以前用xpath解析了XML repsonses,取得了巨大的成功,但在這種情況下它並不起作用。解析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

又有什麼問題呢?爲什麼你*無法真正解析數據*?什麼*不起作用*? SimpleXML可以使用XPath並且可迭代。聽起來像現在的gimme-teh-codez。 – Gordon

+0

問題是,XPath不會工作,儘管我使用的是「通配符」,它是// – moffepoffe

+1

'foreach(simplexml_load_file($ apiUrl) - > Blocks-> Block as $ block){' – Gordon

回答

1

您可能忽略的命名空間。你所有的元素都在http://www.xxx.xxx/xxxx/xxx2命名空間,所以你必須第一個問題this command

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

然後你就可以用你的地址元素:

//x:Code 
+0

如果這是問題,那麼問題是重複的 – Gordon

+0

是的,但如果您以前沒有聽過「XML命名空間」這個短語,則很難搜索它。 – Boldewyn

+0

搜索http://stackoverflow.com/search?q=xpath+not+working+php並不難。僅僅列出前五個不回答問題的結果只是更多的努力。 – Gordon