2013-08-30 164 views
0

我試圖解析一個「不太正常」的XML Web服務。看來Web服務正在返回一個字符串,並在該字符串中包含XML。解析類似XML的Web服務(Web服務在字符串中返回xml)

的XML看起來是這樣的:

<string> 
    <NewDataSet> 
    <Table> 
     <CATID>0</CATID> 
     <DEPID>0</DEPID> 
    </Table> 
    <Table> 
     <CATID>1</CATID> 
     <DEPID>1</DEPID> 
    </Table> 
    </NewDataSet> 
<string> 

這是我的代碼的,現在,我已經嘗試了許多變化,但不能得到任何工作。大多數情況下,它什麼都不會返回。我回應了$ xml,它將返回所有的XML,但我只需要顯示CATID,而不是其他任何東西。

<?php 

$file = file_get_contents('http://theWebSericeLink.here'); 
$xml = simplexml_load_string($file); 

//echo $xml; 
foreach($xml->Table as $item) { 
    echo $item->CATID; 
} 
?> 

我也試過:

foreach($xml->NewDataSet->Table as $item) 

foreach($xml->String->NewDataSet->Table as $item) 

在此先感謝。

+0

最後結束標記(串)與錯寫(無/):

我的foreach功能之前,我從「XML字符串」 web服務返航創建一個XML文件。這個錯誤是否存在於源代碼中? –

+0

@Will Irvine你是否檢查我的答案 –

+0

對不起,這是我的錯字。源代碼具有結束標記。 – Will

回答

0

我想通了。

$xml = simplexml_load_string($file); 
$feed = '<?xml version="1.0" encoding="ISO-8859-1"?>'.$xml; 

file_put_contents("workhorse.xml", $feed); 
$myxml=simplexml_load_file("workhorse.xml"); 
0

如果您在回顯時看到XML,則可能需要使用xpath。

$id = $xml->xpath('/table/CATID'); 
+0

我試過這個,不能讓它工作。我確實搞清楚了,查看我的答案。 – Will

1

嘗試此

<?php 
$k = '<string> 
    <NewDataSet> 
     <Table> 
      <CATID>0</CATID> 
      <DEPID>0</DEPID> 
     </Table> 
     <Table> 
      <CATID>1</CATID> 
      <DEPID>0</DEPID> 
     </Table> 
    </NewDataSet> 
</string>'; 
$xml = simplexml_load_string($k); 

    foreach($xml->NewDataSet->Table as $read){  
    echo $read->CATID."<br>"; 
    } 
?> 

輸出

0 
1 
+0

這在您的示例中起作用,但使用從我的Web服務返回它不會。我不知道爲什麼,但不管我怎麼嘗試都不行。這裏的問題是我必須使用的Web服務,而不是你們。 :)但我確實搞清楚了,查看我的答案。 – Will

0

作爲第一步驟,在端部閉合的標籤,並用 「print_r」 的xml變量開始。

print_r($xml); 

由於家長和孩子的標籤,它就像是一個array通過每個領域得到一個結果。

在你的情況,

<string> 
    <NewDataSet> 
    <Table> 

所以

$tables = $xml->NewDataSet->Table; 

foreach ($tables as $table) 
{ 
    foreach ($table->CATID as $catid){ 
     echo $catid, "\n"; 
    } 
} 
+2

不解析字符串。發生了錯誤。注意:試圖在線獲取非對象的屬性16 –

+0

我嘗試了這一點,並無法使其工作。我確實搞清楚了,查看我的答案。 – Will