<p>使用lxml、Java DOM和C# XmlDocument可生成带CDATA的XML,分别通过etree.CDATA、createCDATASection和CreateCDataSection方法实现,注意避免嵌套及编码问题。</p>

在XML中,CDATA(Character Data)节点用于包裹文本内容,使其中的特殊字符(如 <、>、& 等)无需进行实体转义。生成带有CDATA节点的XML,关键在于使用支持CDATA输出的XML生成工具或API。以下介绍几种常见方法及示例。
Python的xml.etree.ElementTree默认不支持CDATA,但可以通过自定义序列化方式实现。推荐使用lxml库,它原生支持CDATA。
示例代码:
from lxml import etreeroot = etree.Element("message") content = etree.CDATA("这是一段包含特殊字符的内容:<script>alert('XSS')</script>") root.append(etree.Element("content")) root.find("content").text = content
xml_str = etree.tostring(root, encoding="utf-8", pretty_print=True, xml_declaration=True) print(xml_str.decode())
输出结果:
<?xml version='1.0' encoding='utf-8'?> <message> <content><![CDATA[这是一段包含特殊字符的内容:<script>alert('XSS')</script>]]></content> </message>在Java中,可以使用javax.xml.parsers和org.w3c.dom.Document创建XML,并通过Document.createCDATASection()方法添加CDATA节点。
示例代码:
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.*;public class CreateCDataXML { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument();
Element root = doc.createElement("article");
doc.appendChild(root);
Element body = doc.createElement("body");
String cdataContent = "<p>这是HTML内容,包含标签</p>";
CDATASection cdata = doc.createCDATASection(cdataContent);
body.appendChild(cdata);
root.appendChild(body);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}}
C#中的XmlDocument类提供CreateCDataSection方法来创建CDATA节点。
示例代码:
using System; using System.Xml;class Program { static void Main() { XmlDocument doc = new XmlDocument(); XmlDeclaration decl = doc.CreateXmlDeclaration("1.0", "utf-8", null); doc.AppendChild(decl);
XmlElement root = doc.CreateElement("data");
doc.AppendChild(root);
XmlElement desc = doc.CreateElement("description");
string cdataText = "这里可以写任意文本,比如 <tag>不被解析的内容</tag>";
XmlCDataSection cdata = doc.CreateCDataSection(cdataText);
desc.AppendChild(cdata);
root.AppendChild(desc);
doc.Save(Console.Out);
}}
生成带CDATA的XML时,注意以下几点:
基本上就这些常用方法,选择适合你开发语言的技术方案即可实现带CDATA节点的XML生成。
以上就是XML中如何生成带CDATA节点的XML_XML生成带CDATA节点XML的方法与示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号