修改 PHP 中的 ![CDATA[]]? (XML)
Modify ![CDATA[]] in PHP? (XML)
我有一个 XML 文件,其中包含 ![CDATA[]] 数据。像这样:
<link><![CDATA[https://google.de]]></link>
现在我听说我不能修改![CDATA[]] 数据或者它们包含一些特殊字符。但是我已经不记得了...
这就是我在这里问的原因。
我可以更改 ![CDATA[]] 中的值吗?如果可以,如何更改?
我只想在 link 上附加类似“?=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¤cy=EUR]]></url>
<price><![CDATA[3.88 EUR]]></price>
<platform>Uplay</platform>
</item>
</channel>
</rss>
你好
幸运的是!检查这个:
$link = simplexml_load_string(
'<link><![CDATA[Hello, world!]]></link>'
);
echo (string)$link;
PHP: How to handle <![CDATA[ with SimpleXMLElement?
此致,
伊迪尔
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>
我有一个 XML 文件,其中包含 ![CDATA[]] 数据。像这样:
<link><![CDATA[https://google.de]]></link>
现在我听说我不能修改![CDATA[]] 数据或者它们包含一些特殊字符。但是我已经不记得了... 这就是我在这里问的原因。
我可以更改 ![CDATA[]] 中的值吗?如果可以,如何更改?
我只想在 link 上附加类似“?=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¤cy=EUR]]></url>
<price><![CDATA[3.88 EUR]]></price>
<platform>Uplay</platform>
</item>
</channel>
</rss>
你好
幸运的是!检查这个:
$link = simplexml_load_string(
'<link><![CDATA[Hello, world!]]></link>'
);
echo (string)$link;
PHP: How to handle <![CDATA[ with SimpleXMLElement?
此致, 伊迪尔
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>