2013-09-30 69 views
0

我一直試圖弄清楚幾個小時。我試圖從只使用str屬性的XMl中獲取數據。這裏是一個示例XMl即時通訊嘗試使用。嘗試從僅使用str的XML獲取PHP數據

<doc> 
<str name="author">timothy</str> 
<str name="author_s">timothy</str> 
<str name="title">French Gov't Runs Vast Electronic Spying Operation of Its Own</str> 
<arr name="category"> 
    <str>communications</str> 
</arr> 
<str name="slash-section">yro</str> 
<str name="description">Dscription</str> 
<str name="slash-comments">23</str> 
<str name="link">http://rss.slashdot.org/~r/Slashdot/slashdot/~3/dMLqmWSFcHE/story01.htm</str> 
<str name="slash-department">but-it's-only-wafer-thin-metadata</str> 
<date name="date">2013-07-04T15:06:00Z</date> 
<long name="_version_">1439733898774839296</long></doc> 

所以我的問題是,我不能似乎得到的數據出來 這種嘗試:

<?php 
    $x = simplexml_load_file('select.xml'); 
    $xml = simplexml_load_string($x); 
    echo $xml->xpath("result/doc/str[@name='author']")[0]; 
?> 

服務器給了我一個錯誤

誰能幫助我?

+2

你會得到哪個錯誤?也許你需要這樣做xpath:'$ xml-> xpath(「/ result/doc/str [@ name ='author']」)[1]' –

+0

這是以下錯誤:解析錯誤:語法錯誤,意想不到的'[',期待','或';' 我已經嘗試了一切。似乎沒有任何幫助。我錯過了什麼? – user2831723

回答

0

訪問xpath方法[0]的語法無效!。這是[0]適用於什麼模糊。

從PHP 5.4.0起,可以使用array dereferencing for function/methods

您的xpath對於您發佈的XML也是錯誤的。

這工作:

$result = $xml->xpath("/doc/str[@name='author']"); 
echo "Author: " . $result[0]; 

輸出:

Author: timothy 

如果你有多個標籤,那麼你需要循環或更改您的XPath。例如,你可以這樣做:

$xmlstr = '<doc> 
    <str name="author">timothy</str> 
    <str name="author_s">timothy</str> 
    <str name="title">French Gov\'t Runs Vast Electronic Spying Operation of Its Own</str> 
    <arr name="category"> 
     <str>communications</str> 
     <str>test2</str> 
    </arr> 
    </doc>'; 

$xml = simplexml_load_string($xmlstr); 

$result = $xml->xpath("/doc/arr[@name='category']"); 
foreach($result as $xmlelement){ 
    foreach($xmlelement->children() as $child){ 
     echo "Category: $child" . PHP_EOL; 
    } 
} 

輸出:

Category: communications 
Category: test2 
+0

好吧,這給了我更多的錯誤,然後我開始。 Warning:simplexml_load_string()[function.simplexml-load-string] Warning:simplexml_load_string()[function.simplexml-load-string]:Entity:line 5:parser error:Start tag expected,'<'not found在 致命錯誤:調用一個非對象的成員函數xpath()在 – user2831723

+0

您仍然需要這一行:'simplexml_load_file('select.xml');' – immulatin

+0

我有,但我有一個nother路徑指標我的XML是「結果」。現在完美工作。謝謝 ! – user2831723

2

變化:

$xml->xpath("result/doc/str[@name='author']")[0] 

要:

$xml->xpath("result/doc/str[@name='author'][1]") 

[0]是不正確的,以獲得第一次出現。在XPath中,第一次發生的是[1]。也與您的錯誤[0]應該在XPath中,而不是在最後。