为什么调用XmlWriter.WriteCData(String)方法时会添加额外的元素?

问题描述 投票:0回答:1

我需要将包含 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部分的值格式不正确?

c# xml cdata xmlwriter
1个回答
0
投票

最好使用 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>
© www.soinside.com 2019 - 2024. All rights reserved.