从节点名称中包含冒号的 XML feed 中获取某些值

问题描述 投票:0回答:1

我似乎找不到一种方法来正确地从中获取一些值

php xml xml-namespaces
1个回答
1
投票

问题出现在使用命名空间时,在任何 XML 系统中处理它们都很简单,这里我使用了 SimpleXML。 我还假设它是重复的频道。

要使用命名空间,您需要将它们注册到 XML 系统,以便它知道如何将它们与搜索关联起来,所以这里我使用

newznab
作为
attr
的前缀。 但这是您在 XML 文档中看到的内容,因此它更易于阅读。 XPath 使用
[@name='size']
使其找到具有此属性/值组合的
attr
实例 - 然后返回
value
属性。

$xml = simplexml_load_file('NewFile.xml');
$xml->registerXPathNamespace("atom", "http://www.w3.org/2005/Atom");
$xml->registerXPathNamespace("newznab", "http://www.newznab.com/DTD/2010/feeds/attributes/");

foreach( $xml->channel as $channel ){
    echo "Channel title=".(string)$channel->title.PHP_EOL;
    echo "size=".(string)$channel->xpath("descendant::newznab:attr[@name='size']/@value")[0].PHP_EOL;
    echo "usenetdate=".(string)$channel->xpath("descendant::newznab:attr[@name='usenetdate']/@value")[0].PHP_EOL;
}
© www.soinside.com 2019 - 2024. All rights reserved.