我需要将包含 CDATA 部分的其他 xml 节点的值写入 XML 节点的 CDATA 部分(我使用 .NET 6)
例如,我需要生成并编写以下XML:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item><![CDATA[<some_node><![CDATA[cdata_value]]></some_node>]]</item>
</items>
要生成 XML,我使用以下代码:
string str_xml = String.Empty;
using (MemoryStream m_stream = new MemoryStream())
{
using (XmlWriter xml_writer = XmlWriter.Create(m_stream, new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true, OmitXmlDeclaration = false }))
{
xml_writer.WriteStartElement("items");
xml_writer.WriteStartElement("item");
xml_writer.WriteCData("<some_node><![CDATA[cdata_value]]></some_node>");
xml_writer.WriteFullEndElement();
xml_writer.WriteEndElement();
xml_writer.Flush();
}
m_stream.Position = 0;
using (StreamReader stream_reader = new StreamReader(m_stream))
{
str_xml = stream_reader.ReadToEnd();
}
}
调试器中str_xml变量的值:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<![CDATA[<some_node><![CDATA[cdata_value]]]]><![CDATA[></some_node>]]>
</item>
</items>
为什么项目节点的CDATA部分的值格式不正确?
最好使用 LINQ to XML API。自 2007 年起,它就在 .Net Framework 中可用。
无需增加 CData 部分。只需一个即可完成这项工作。
c#
void Main()
{
string cdata_content = @"<root>My inner XML</root>";
XElement xelem = new XElement("items",
new XElement("item",
new XCData(cdata_content)));
Console.WriteLine(xelem);
}
输出
<items>
<item><![CDATA[<root>My inner XML</root>]]></item>
</items>