C# 将文本节点插入到包含XML的XML文档中

C# 将文本节点插入到包含XML的XML文档中,c#,xml,C#,Xml,我正在动态构建一个XML文档,其中我使用CreateTextNode(text)方法创建了一个文本节点 现在,如果文本包含XML,则将对其进行XML编码 例如: text = "some <b>bolded</b> text" text=“一些粗体文本” 如何在不使用XML编码的情况下插入文本 编辑: 我正在用XmlDocument构建一个XML文档,并插入元素和节点。 最终输出不应包含CDATA节或编码部分 对于Instance,我希望最终输出如下所示,其中文本来自

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

现在,如果文本包含XML,则将对其进行XML编码

例如:

text = "some <b>bolded</b> text"
text=“一些粗体文本”
如何在不使用XML编码的情况下插入文本

编辑:

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

对于Instance,我希望最终输出如下所示,其中文本来自一个设置:

<root><p>Some <b>bolded</b> text</p></root>
一些粗体文本

将其插入节中:

粗体文本]]>

如果您希望文本成为
“一些粗体文本”
,那么编码就是正确的事情,否则它就不仅仅是一个文本节点。您可以使用CDATA,但我认为这也不是您的意思

您希望xml内容与上面的相同吗?i、 e.这样它就可以在里面得到一个元素


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

        string txt = "some <b>bolded</b> text";
        XmlDocument doc = new XmlDocument();
        doc.LoadXml("<xml><foo/></xml>");
        XmlElement foo = (XmlElement)doc.SelectSingleNode("//foo");

        // text: <foo>some &lt;b&gt;bolded&lt;/b&gt; text</foo>
        foo.RemoveAll();
        foo.InnerText = txt;
        Console.WriteLine(foo.OuterXml);

        // xml: <foo>some <b>bolded</b> text</foo>
        foo.RemoveAll();
        foo.InnerXml = txt;
        Console.WriteLine(foo.OuterXml);

        // CDATA: <foo><![CDATA[some <b>bolded</b> text]]></foo>
        foo.RemoveAll();
        foo.AppendChild(doc.CreateCDataSection(txt));
        Console.WriteLine(foo.OuterXml);
string txt=“一些粗体文本”;
XmlDocument doc=新的XmlDocument();
doc.LoadXml(“”);
XmlElement foo=(XmlElement)doc.SelectSingleNode(“//foo”);
//文本:一些b折叠/b文本
foo.RemoveAll();
foo.InnerText=txt;
WriteLine(foo.OuterXml);
//xml:一些粗体文本
foo.RemoveAll();
foo.InnerXml=txt;
WriteLine(foo.OuterXml);
//CDATA:粗体文本]]>
foo.RemoveAll();
AppendChild(doc.createCDATA节(txt));
WriteLine(foo.OuterXml);

使用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 <b>bolded</b> 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());
    }
}
类程序{
静态void Main(字符串[]参数){
XmlDocument d=新的XmlDocument();
XmlNode root=d.CreateNode(XmlNodeType.Element,“root”,null);
d、 附子(根);
XmlNode cdata=d.CreateNode(XmlNodeType.cdata,“cdata”,null);
cdata.InnerText=“一些粗体文本”;
root.AppendChild(cdata);
打印文件(d);
}
私有静态void打印文档(XmlDocument d){
StringWriter sw=新的StringWriter();
XmlTextWriter=新的XmlTextWriter(sw);
d、 WriteTo(文本编写器);
Console.WriteLine(sw.GetStringBuilder().ToString());
}
}
这会打印出来

<root><![CDATA[some <b>bolded</b> text]]></root>
粗体文本]]>
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 <b>bolded</b> text";
        root.AppendChild(cdata);

        PrintDocument(d);
    }
static void Main(字符串[]args){
XmlDocument d=新的XmlDocument();
XmlNode root=d.CreateNode(XmlNodeType.Element,“root”,null);
d、 附子(根);
XmlNode cdata=d.CreateNode(XmlNodeType.Element,“cdata”,null);
cdata.InnerXml=“一些粗体文本”;
root.AppendChild(cdata);
打印文件(d);
}
这张照片

<root><cdata>some <b>bolded</b> text</cdata></root>
一些粗体文本

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

您使用的是什么模型?XML文档?XDocument?什么?为什么不希望对其进行编码?文本来自设置,必须以文本或XML形式插入。最后一个XML不应该包含CDATA部分。外部和内部XML可以做到这一点,我认为它可以使用额外的逻辑。
<root><cdata>some <b>bolded</b> text</cdata></root>