尝试从xml获取所有URL值。
我有数百个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);
对此有什么相关问题?最好只获得url
值。
答案 0 :(得分: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";
#####
}
值
属性的值
答案 1 :(得分: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
数组中为您提供所有URL作为字符串。如果加载XML文件时出错,则该数组为空。