gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:02:01 25 4
gpt4 key购买 nike

我正在使用 DOMDocument 类解析 xml 文档。首先,我使用 $xml->getElementsByTagName('item') 选择了所有名为“item”的节点方法。我的示例 xml 文件如下所示:

<item>
<title>...</link>
<description>...</description>
<pubDate>...</pubDate>
<ns:author>...</dc:creator>
</item>

但是我的问题是从带有冒号符号的命名空间名称的嵌套标记中获取值。我从 foreach 中没有命名空间的节点获取值使用 $node->getElementsByTagName('description')->item(0)->nodeValue并且没有错误。

我还找到了方法 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,它应该在源文档中。

这输出...
Author = author1

关于php - 使用 PHP DOMDocument 从带有冒号的命名空间的 xml 节点获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48433965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com