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

标签 php xml domdocument xml-namespaces

我有一个文件 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>

如您所见,不再有带有 本地名称 creatorxmlns-prefix dc ( <dc:creator> ) 的元素。

但是,由于您为示例粘贴了错误的 XML,并且可能在实际 XML 中定义了命名空间前缀,因此您只是询问如何访问具有命名空间前缀的标记(这是冒号 : 之前的部分)。这已经在这里概述了:

如果您想要一个标签位于其自己的命名空间内的元素,您需要告诉 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/

相关文章:

php - 将 XMLHttpRequests 发送到不同的脚本或一个委托(delegate)任务的主脚本更好吗?

c# - xml签名DS前缀?

python - 解析带有前缀标签的 .xml? xml.etree.元素树

java - 使用 javax.xml.validation.Validator 针对 XSD 进行 XML 验证

php xpath 获取带有类的div 的内容

php - 在 xml 文件的特定点插入 xml

PHP 使用 xPath 查询 XML

php - 如何创建包含html代码的json对象

php - 简化复杂的count SQL语句

javascript - Protractor browser.executeScript 抛出 'SyntaxError: missing ) after argument list' 异常