在SimpleXMLElement對象上應用xpath()
,從字符串中加載XML。如果我從文件加載它 - 它不......我只是得到一個空數組。在xpath中使用php不支持文件
我正在搜索的元素的深度級別是5(如果我們說根節點是第一級)。當從字符串xml - 它工作,即使從最後一級開始的xpath表達式......當從文件xml - 沒有xpath工作。
我試圖將XML內容加載到SimpleXMLElement對象物(以及將所述xpath()
)的方法:
1.
$xml = simplexml_load_file('filepath/file.xml');
$result = $xml->xpath('//Export/Product/Settings/Info[@Art="Short"]/@Something');
2.
$xmlStr = file_get_contents('filepath/file.xml');
$xml = new SimpleXMLElement($xmlStr);
$result = $xml->xpath('//Export/Product/Settings/Info[@Art="Short"]/@Something');
沒有成功,這兩個他們......當從字符串只是$xml = simplexml_load_string($xmlStr);
工作正常。我查看了THIS ARTICLE,並可能嘗試了幾乎所有關於我的案例的評論中的任何建議。
我注意到的另一個奇怪的事情是,當我在日誌中寫入$xml
時,從字符串中獲得Product
(這是第二個)的深度級別的輸出(數組和對象等)。但是當我使用從文件加載的$xml
來完成時 - 我從根節點獲取輸出。 XML代碼的
簡單表示:
<Export>
<Product>
...a lot of other elements...
<Settings>
<Info Art="Short" Something="blahblahblah"/>
<Info Art"asda" Somethig="dsad"/>
<Info .... />
...
</Settings>
</Product>
</Export>
所以我的問題是 - 我怎麼得到它的工作,當我從文件加載XML,因爲當我從字符串加載它的工作原理?
P.S.我不知道這是否與當前問題有關,但是 - 當我從字符串(heredoc)加載,並且該字符串具有第一行<?xml version="1.0" encoding="UTF-8"?>
- 我在non-object
上遇到了調用xpath()
的錯誤。但是,只要我刪除第一行,並且字符串從根節點開始 - 一切都完美無瑕。
UPDATE:第一<Export...>
節點:
<Export xmlns="http://something" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://something C:/some_path/some_file.xsd" GA_Vertriebsweg="2" KomplettExport="true">
更新2:從文件加載整個事情並不僅僅因爲第一屬性的<Export...
工作在這裏:<Export xmlns="http://www.evelopment.de/schema/katalogexport/komplett"...>
,所以整個問題出現在命名空間中。
你在你的xml中使用任何命名空間? –
tCode
@ t-coder - 我用第一行('
Syspect
使用simplexml_load_file可以指定一個名稱空間。也許這已經解決了。如果沒有,請將該XML與命名空間上傳並鏈接,以便人們查看。只是FYI 1.和2.)非常相似,你可以用1.)在你的情況下兩者沒有區別。 – hakre