将文本节点插入到包含XML的XML文档中
问题描述:
我正在使用CreateTextNode(text)方法创建文本节点,从而动态构建XML文档。将文本节点插入到包含XML的XML文档中
现在,如果文本包含XML,它将被XML编码。
例如:
text = "some <b>bolded</b> text"
你怎么插入而不被XML编码的文本。
编辑:
我建立一个XML文档与XmlDocument的,插入单元和节点。 最终输出不应该包含CDATA部分或编码部分。
对于instace我想最终的输出看起来是这样,这里的文字来自于一个设置:
<root><p>Some <b>bolded</b> text</p></root>
答
如果你想在文字为"some <b>bolded</b> text"
,然后编码是权利事情 - 否则它不是(只)文本节点。你可以CDATA它,但我不认为这就是你的意思。
你想要的XML内容是上述?即它在里面得到一个<b>...</b>
elelment?
编辑:这里的,增加了通过各种方法的内容代码:
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 <b>bolded</b> 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);
答
使用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());
}
}
这将打印
<root><![CDATA[some <b>bolded</b> text]]></root>
CDATA部分看起来很丑陋,但这是好事W使您插入文本,而不必转义字符...
否则,你可以使用一个节点的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);
}
这将打印
<root><cdata>some <b>bolded</b> text</cdata></root>
但要注意,当你反序列化它,因为“cdata”节点的内容现在实际上是三个节点。
你使用什么模型? XmlDocument的?的XDocument?什么? – 2009-06-04 07:48:47
(回复评论) – 2009-06-04 08:00:58
为什么你不想编码? – AnthonyWJones 2009-06-04 08:01:40