2013-03-18 54 views
2

嘗試從xml獲取所有URL值。簡單的xpath查詢但沒有結果

我有幾百個entry正好像例如,此項16

<?xml version="1.0" encoding="utf-8" ?> 
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <entries> 
    <entry id="16"> 
     <revision number="1" status="accepted" wordclass="v" nounclasses="" unverified="false"></revision> 
     <media type="audio" url="http://website.com/file/65.mp3" /> 
     </entry> 
    <entry id="17"> 
     .... 
    </entry> 
</entries> 
</root> 

我使用此代碼,但不能讓它開始工作。爲什麼?

$doc = new DOMDocument; 

$doc->Load('data.xml'); 

$xpath = new DOMXPath($doc); 

$query = '//root/entries/entry/media'; 

$entries = $xpath->query($query); 

這是什麼correc查詢?最好的辦法是隻獲得url的值。

回答

2

您的查詢可能會返回適當的元素,但默認情況下會爲您提供媒體標記的內容(在您的情況下爲空,因爲標記是自閉合的)。

要獲取標籤的url屬性,你應該使用getAttribute(),例如:

$entries = $xpath->query('//root/entries/entry/media'); 
foreach($entries as $entry) { 
    print $entry->getAttribute("url")."<br/>"; 
} 

或者你應該的XPath查詢的屬性,而不是讀出它的價值:

$urlAttributes = $xpath->query('//root/entries/entry/media/@url'); 
                  ##### 
foreach ($urlAttributes as $urlAttribute) 
{ 
    echo $urlAttribute->value, "<br/>\n"; 
         ##### 
} 

DOMAttr::$valueDocs


屬性的值

+0

謝謝。現在它可以工作。我刪除了這個''當我刪除這個xmlns = somepage時。有效。在沒有輸出之前。 – Patrick 2013-03-18 17:47:11

+2

或者使用'/ root/entries/entry/media/@ url''作爲XPath來直接獲取'DomAttr'節點。 – 2013-03-18 17:49:19

1

我會做到這一點用SimpleXML實際上:

$file = 'data.xml'; 
$xpath = '//root/entries/entry/media/@url'; 

$xml = simplexml_load_file($file); 
$urls = array(); 

if ($xml) { 
    $urls = array_map('strval', $xml->xpath($xpath)); 
} 

,這將給你所有的網址爲$urls數組中的字符串。如果加載XML文件時出錯,則該數組爲空。