0
我用這個examle xml document來練習。我不明白XPath中的node()函數。例如,如果我寫:爲什麼node()XPath節點類型測試在與SimpleXMLElement一起使用時返回重複項?
$catalog = new SimpleXMLElement("cd.xml",null,true);
$elms = $catalog->xpath("//CD[23]/node()");
print_r($elms);
結果是:
Array
(
[0] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 24
[genre] => soul
)
[TITLE] => The dock of the bay
[ARTIST] => Otis Redding
[COUNTRY] => USA
[COMPANY] => Stax Records
[PRICE] => 7.90
[YEAR] => 1968
)
[1] => SimpleXMLElement Object
(
[0] => The dock of the bay
)
[2] => SimpleXMLElement Object
(
[@attributes] => Array
(
[id] => 24
[genre] => soul
)
[TITLE] => The dock of the bay
[ARTIST] => Otis Redding
[COUNTRY] => USA
[COMPANY] => Stax Records
[PRICE] => 7.90
[YEAR] => 1968
) ...
等,重複CD [23]每一個孩子元素之後元素。我嘗試了很多變化,並且總是以某種方式獲得重複。我不明白這是爲什麼?
我試着通過刪除新的行和空格來編輯xml文檔,所以在元素之間沒有文本節點,並且我得到的結果沒有重複。這是否是xpath()方法代表那些文本節點的方式?
從https://stackoverflow.com/questions/11744465/xpath-difference-between-node-and-text開始 –
我認爲部分問題是由SimpleXML涉及的簡化造成的,'xpath'方法返回一個數組'SimpleXMLElement'的數組,以及使用'node()'在純XPath映射中選擇CD [23]的任何種類的子節點的路徑,您將獲得包含文本節點和元素節點的節點列表或集合,似乎該PHP的API的設計者在選定文本節點的情況下返回其父元素,因此對於CD [23]的任何文本節點子節點,您都可以獲得該數組中返回的元素。你可能想用'CD [23]/*'去選擇任何子元素。 –
謝謝,現在更清楚 – cappet