2016-01-17 194 views
0
<RESULTS> 
    <ROW> 
     <COLUMN NAME="ID"><![CDATA[001]]></COLUMN> 
     <COLUMN NAME="NAME"><![CDATA[ORG001]]></COLUMN> 
     <COLUMN NAME="CODE"><![CDATA[1234]]></COLUMN> 
    </ROW> 
</RESULTS> 

使用simplexml/xpath我想返回ID爲001的'NAME'和'CODE'的屬性文本,有很多行,所以結果會根據id號而不同獲取屬性值SimpleXML Xpath PHP

編輯: 訪問CDATA是不是問題就在這裏,它返回名稱和代碼,其中id = 001等的值

繼承人什麼,我試圖讓名

echo (string)$xml->xpath('/RESULT/ROW/COLUMN[@ID] = ["001"]/COLUMN[@Name="NAME"]');

感謝

+1

那你試試?你能告訴我們你的代碼嗎? –

+1

[PHP:如何處理<!\ [CDATA \ [with SimpleXMLElement?](http://stackoverflow.com/questions/2970602/php-how-to-handle-cdata-with-simplexmlelement) – chris85

回答

0

不知道你真正努力去做。據我瞭解...

$xml = simplexml_load_string($x); // assuming XML in $x 
$hit = (string)$xml->xpath("/RESULTS/ROW[COLUMN/@NAME='ID' and COLUMN/text() = '001']/COLUMN[@NAME='NAME']")[0]; 

以上代碼一步一步:

  • (string)將迫使結果爲字符串,而不是對象
  • 的XPath表達式:得到<ROW>的小孩<COLUMN>,屬性爲NAME='ID',值爲001
  • 從該特定<ROW>開始,選擇子<COLUMN>,屬性爲NAME='NAME'
  • xpath()返回一個SimpleXml元素的數組,由[0]我們選擇它的第一個條目。
  • 請注意,此代碼缺少檢查是否存在匹配。

看到它的工作:https://eval.in/503464

編輯
重新閱讀的問題。爲了得到你想要的結果,選擇<ROW>,然後遍歷<COLUMN>

$hit = $xml->xpath("/RESULTS/ROW[COLUMN/@NAME='ID' and COLUMN/text() = '001']")[0]; 
foreach ($hit as $column) 
    echo $column['NAME'] . ": " . $column . PHP_EOL; 

輸出:

ID: 001 
NAME: ORG001 
CODE: 1234 

看到https://eval.in/503493

+0

謝謝非常多的答案,和humorus變量命名!有沒有簡單的方法將每列變成一個變量?謝謝 :) – Kingy04