【发布时间】:2018-01-24 20:54:20
【问题描述】:
我有以下 XML 数据:
<?xml version="1.0" encoding="utf-8"?>
<source>
<publisher>some-data</publisher>
<publisherurl>some-data</publisherurl>
<lastBuildDate>a-date</lastBuildDate>
<element>
<sub-element><![CDATA[some-data]]></sub-element>
</element>
</source>
我正在尝试使用 PHP 内置的 DOMdocument 解析器来更新 sub-element 中的文本。
我试过了:
$dom=new DOMDocument();
$dom->load("document.xml");
$ele=$root->getElementsByTagName('element');
foreach ($ele as $e) {
$e->getElementsByTagName('sub-element')->item(0)->nodeValue = "new val";
}
这种方法有效,但它会删除 CDATA 并将其替换为 new-val。我想保留 CDATA 字段,所以我尝试了以下操作:
$dom=new DOMDocument();
$dom->load("document.xml");
$ele=$root->getElementsByTagName('element');
foreach ($ele as $e) {
$sub=$e->getElementsByTagName('sub-element');
foreach($sub->childNodes as $child) {
if ($child->nodeType == XML_CDATA_SECTION_NODE) {
$child->nodeValue = 'new-val';
}
}
}
这似乎应该可以工作,但 PHP 返回以下 通知
未定义属性:DOMNodeList::$childNodes
感觉自己走在正确的道路上,但我就是不知道自己做错了什么。有人知道怎么解决吗?
我的最终目标输出是:
<?xml version="1.0" encoding="utf-8"?>
<source>
<publisher>some-data</publisher>
<publisherurl>some-data</publisherurl>
<lastBuildDate>a-date</lastBuildDate>
<element>
<sub-element><![CDATA[new-val]]></sub-element>
</element>
</source>
【问题讨论】:
标签: php xml domdocument cdata