[英]Get value from xml node with namespace with colon using PHP DOMDocument
我正在使用DOMDocument类解析xml文档。 首先,我使用$xml->getElementsByTagName('item')
方法选择了名称为“ item”的所有节点。 我的样本xml文件如下所示:
<item>
<title>...</link>
<description>...</description>
<pubDate>...</pubDate>
<ns:author>...</dc:creator>
</item>
但是我的问题是从带有冒号的命名空间名称的嵌套标记中获取值。 我使用$node->getElementsByTagName('description')->item(0)->nodeValue
从foreach
没有名称空间的节点获取值,并且没有错误。
我还发现了getElementsByTagNameNs()方法来获取具有其命名空间的节点。 但是,当我尝试获取像以前的节点一样没有命名空间的nodeValue时,我得到“ PHP注意:试图获取非对象的属性”。 我认为这很奇怪,因为getElementsByTagNameNs()->item(0)
返回对象DOMElement。
您是否知道如何从具有名称空间的节点(在这种情况下为<ns:author></dc:creator>
元素)获取价值?
由于您提供的文档片段不完整甚至无效,因此我不得不进行一些更改。 您说您想要<ns:author>...</dc:creator>
的值,该值不是有效元素,因为打开和关闭名称在名称和名称空间上都不同,所以您会期望像<ns:author>...</ns:author>
作为如何从名称空间获取值的示例(使用对XML的某些更正和某些猜测的更改)...
$xml = <<<XML
<?xml version="1.0"?>
<items xmlns:ns="http://some.url">
<item>
<title>title</title>
<description>Descr.</description>
<pubDate>1/1/1970</pubDate>
<ns:author>author1</ns:author>
</item>
</items>
XML;
$dom = new DOMDocument( '1.0', 'utf-8' );
$dom->loadXML($xml);
$items = $dom->getElementsByTagName('item');
foreach ( $items as $item ) {
$author = $item->getElementsByTagNameNS("http://some.url", "*")->item(0)->nodeValue;
echo "Author = ".$author.PHP_EOL;
}
在getElementsByTagNameNS()
您需要为此名称空间输入正确的URL,该URL应在源文档中。
输出...
Author = author1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.