2011-12-01 80 views
2

我需要在PHP中查詢XML字符串我知道我正在尋找的節點的名稱,但我可能不一定知道節點。使用PHP simpleXML來找到一個節點我知道它的名字,但不知道它駐留在哪裏

我想我可以用xpath做到這一點,但我無法弄清楚如何設置一個相對路徑來查看文檔中的任何地方,有人能指引我朝着正確的方向。

我目前正試圖用simpleXML實現這個目標,但如果有更好的方法做到這一點,我很樂意聽到它。

回答

10

不要使用正則表達式來解析XML!

在xpath中的後代(雙斜線)運算符將搜索所有後代以進行匹配。

$matches = $simplexmlelementobject->xpath('//nameOfElement'); 

以上等同於DOM方法getElementsByTagName

如果你有其中的元素的生活,你可以使用後代運營商總體思路尋找低於某一節點:

$matches = $simplexmlelementobject->xpath('someparentelement[@conditionalattr=something]//nameOfDescendantElementYouWant'); 

如果您需要使用DOMDocument而不是SimpleXML,則可以根據需要使用DOMXPath對象發出xpath指令。 (作爲讀者的練習)

+2

這有效。另請參閱SimpleXMLElement :: registerXPathNamespace,如果xml元素名稱是命名空間的,例如 goat

0

我不確定XML結構是什麼樣子,但我用這個blog post來幫助解決一些我用XML解析時遇到的問題。它似乎解釋的基礎知識,加上總是指php.net

我希望這可以幫助,但沒有看到完整的問題,我不能完全回答這個問題。

+0

不幸的是,沒有一個具體的例子,XML可以改變,但節點名稱將保持不變,這就是爲什麼我要尋找一個通用的解決方案。感謝您的鏈接,我現在會閱讀它。 – Toby

相關問題