繁体   English   中英

使用PHP DOMDocument从带有命名空间的XML节点获取带有冒号的值

[英]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)->nodeValueforeach没有名称空间的节点获取值,并且没有错误。

我还发现了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM