gpt4 book ai didi

php - 使用php domxml读取xml文件时出错?

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

我有一个文件 test.xml

<?xml version="1.0" encoding="UTF-8"?>
<item>
<dc:creator><![CDATA[hello world]]></dc:creator>
</item>

和代码php
$doc = new DOMDocument();
$doc->load('test.xml');
$items = $doc->getElementsByTagName('item');
foreach ($items as $item) {
$authors = $item->getElementsByTagName( "dc:creator" );
$author = $authors->item(0)->nodeValue;
echo $author;
}

=> 错误无法获取值,如何获取,结果是“hello world”

最佳答案

您使用了错误的元素名称。方法 getElementsByTagName 需要本地名称,即 creator 在您的情况下。

您可以看到,如果您加载示例 XML

<?xml version="1.0" encoding="UTF-8"?>
<item>
<dc:creator><![CDATA[hello world]]></dc:creator>
</item>

进入 DOMDocument。您会收到警告:

Warning: DOMDocument::loadXML(): Namespace prefix dc on creator is not defined in Entity



因为没有定义命名空间前缀,DOMDocument 将删除它。这将产生以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<item xmlns:dc="ns:1">
<creator><![CDATA[hello world 2]]></creator>
</item>

如您所见,不再有本地名称为 creator 且带有 xmlns 前缀 dc ( <dc:creator> ) 的元素。

但是,由于您为示例粘贴了错误的 XML,并且可能 namespace 前缀是在您的真实 XML 中定义的,因此您只是询问如何访问带有 namespace 前缀的标签(即冒号 : 之前的部分)。这已经在这里概述:
  • How read < abc: xyz > xml tag using php?

  • 如果你想要一个元素的标签在它自己的命名空间内,你需要告诉 DOMDocument 你的意思是哪个命名空间:
    $dcUri   = $doc->lookupNamespaceUri('dc');
    $authors = $item->getElementsByTagNameNS($dcUri, 'creator');
    $author = $authors->item(0)->nodeValue;

    关于php - 使用php domxml读取xml文件时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15893682/

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