php - 在 PHP 中修改 ![CDATA[]] ? (XML)

标签 php xml dom simplexml cdata

我有一个包含 ![CDATA[]] 数据的 XML 文件。像这样:

<link><![CDATA[https://google.de]]></link>

现在我听说我无法修改![CDATA[]]数据或者它们包含一些特殊字符。但我已经不记得了... 这就是我在这里问的原因。

我可以更改 ![CDATA[]] 中的值吗?如果可以,如何更改?

我只想在链接上附加类似“?=dadc”的内容。

编辑: 我的 XML 文件结构(想要编辑 url):

<?xml version="1.0" encoding="UTF-8"?>
    <rss>
      <channel xmlns:g="http://base.google.com/ns/1.0" version="2.0">
        <title>Google Eur English 1</title>
        <description/>
        <item>
          <title>Anno 2070</title>
          <g:image_link><![CDATA[http://cdn.kinguin.net/media/catalog/category/anno_8.jpg]]></g:image_link>
          <url><![CDATA[http://www.kinguin.net/category/4/anno-2070/?nosalesbooster=1&country_store=1&currency=EUR]]></url>
          <price><![CDATA[3.88 EUR]]></price>
          <platform>Uplay</platform>
        </item>
      </channel>
    </rss>

问候

最佳答案

对于 SimpleXML 来说确实如此。 CDATA 节是一种特殊类型的文本节点。它们实际上是为了让嵌入式部件对人类来说更易读。 SimpleXML 并不真正处理 XML 节点,因此您必须让它将它们转换为标准文本节点。

如果 XML 中有 JS 或 HTML 片段,那么如果使用 < 等特殊字符,则更容易阅读。都没有逃脱。这就是 CDATA 部分的用途(以及浏览器的一些向后兼容性)。

因此,要修改 CDATA 部分并保留它,您必须使用 DOM。 DOM 实际上知道不同的节点类型。这是一个小例子:

$xml = '<link><![CDATA[https://google.de]]></link>';

$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);

foreach ($xpath->evaluate('//link/text()') as $linkValue) {
  $linkValue->data .= '?abc';
}
echo $document->saveXml();

输出:

<?xml version="1.0"?>
<link><![CDATA[https://google.de?abc]]></link>

关于php - 在 PHP 中修改 ![CDATA[]] ? (XML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42354598/

相关文章:

javascript - 当加载的内容具有特殊字符时,使用 html() 加载动态数据会破坏脚本

java - Android:100+ KB 的文件下载变成 1 KB

javascript - 如果属性相等,则获取列表中的第一个元素 - VUE.js

java - Xml 到 JSON 单值数组处理

xml - xslt - 引用上一个模板的输出结果

internet-explorer - HTML/DOM : What is standards equivalent of document. body.scrollHeight?

javascript - 为什么我的 angularJS 没有在 DOM 中正确更新?

php - 重建 VM 后 apache2 中的 Symfony2 URL 404

php - 交响乐/主义 : Getting the first maximum value from database

PHP:获取我的图像目录中包含的所有文件名的列表