将文本节点插入包含XML的XML文档

我正在动态构建XML文档,我使用CreateTextNode( text )方法创建一个文本节点。

现在,如果文本包含XML,它将是XML编码的。

例如:

text = "some bolded text" 

如何在不进行XML编码的情况下插入文本。

编辑:

我正在使用XmlDocument构建XML文档并插入元素和节点。 最终输出不应包含CDATA部分或编码部分。

对于instace,我希望最终输出看起来像这样,文本来自一个设置:

 

Some bolded text

如果你希望文本"some bolded text" ,那么编码是正确的 – 否则它不是(只是)一个文本节点。 你可以CDATA它,但我不认为这也是你的意思。

你想要xml内容如上吗? 即,它内部有一个... 元素


编辑:这里是通过各种方法添加内容的代码:

  string txt = "some bolded text"; XmlDocument doc = new XmlDocument(); doc.LoadXml(""); XmlElement foo = (XmlElement)doc.SelectSingleNode("//foo"); // text: some <b>bolded</b> text foo.RemoveAll(); foo.InnerText = txt; Console.WriteLine(foo.OuterXml); // xml: some bolded text foo.RemoveAll(); foo.InnerXml = txt; Console.WriteLine(foo.OuterXml); // CDATA: bolded text]]> foo.RemoveAll(); foo.AppendChild(doc.CreateCDataSection(txt)); Console.WriteLine(foo.OuterXml); 

将其插入CDATA部分:

 bolded text]]> 

使用CDATA节点,如下所示:

 class Program { static void Main(string[] args) { XmlDocument d = new XmlDocument(); XmlNode root = d.CreateNode(XmlNodeType.Element, "root", null); d.AppendChild(root); XmlNode cdata = d.CreateNode(XmlNodeType.CDATA, "cdata", null); cdata.InnerText = "some bolded text"; root.AppendChild(cdata); PrintDocument(d); } private static void PrintDocument(XmlDocument d) { StringWriter sw = new StringWriter(); XmlTextWriter textWriter = new XmlTextWriter(sw); d.WriteTo(textWriter); Console.WriteLine(sw.GetStringBuilder().ToString()); } } 

这将打印出来

 bolded text]]> 

CDATA部分看起来很丑,但这就是你如何插入文本而不必转义字符…

否则,您可以使用节点的InnerXml属性:

  static void Main(string[] args) { XmlDocument d = new XmlDocument(); XmlNode root = d.CreateNode(XmlNodeType.Element, "root", null); d.AppendChild(root); XmlNode cdata = d.CreateNode(XmlNodeType.Element, "cdata", null); cdata.InnerXml = "some bolded text"; root.AppendChild(cdata); PrintDocument(d); } 

这打印

 some bolded text 

但是在反序列化时要注意,因为“cdata”节点的内容现在实际上是三个节点。