【发布时间】:2011-09-09 18:05:50
【问题描述】:
我有这个代码来创建和更新 xml 文件:
<?php
$xmlFile = 'config.xml';
$xml = new SimpleXmlElement('<site/>');
$xml->title = 'Site Title';
$xml->title->addAttribute('lang', 'en');
$xml->saveXML($xmlFile);
?>
这会生成以下 xml 文件:
<?xml version="1.0"?>
<site>
<title lang="en">Site Title</title>
</site>
问题是:有没有办法用这种方法/技术添加CDATA来创建下面的xml代码?
<?xml version="1.0"?>
<site>
<title lang="en"><![CDATA[Site Title]]></title>
</site>
【问题讨论】:
-
看起来 SimpleXML 不支持创建 CDATA 节点。改用DOM
-
你为什么在乎?
<title lang="en">Site Title</title>和<title lang="en"><![CDATA[Site Title]]></title>是相同的,只是使用更多字节并且更难作为人类阅读。 -
@Quentin 好点。只是客户要求。
-
@Quentin - 使用 CDATA 可以更轻松地编写,因为您不必担心转义任何内容/使其在数据中成为严格的 XML。例如,如果您编写了
<title lang="en">Site<br>Title</title>,它将破坏 XML 解析器(打开 br 标记而不关闭不是严格的 XML),而<title lang="en"><![CDATA[Site<br>Title]]></title>不会。因此,在与客户端打交道时,通常更多只有 CDATA 可读性,而不是所有不稳定的转义所述非 CDATA 节点可能必须包含以避免 CDATA。 -
@JimboJonny — 如果您是手动编写的话,这很好,但问题是关于从 PHP 生成它。