2009-06-04 93 views
3

我正在使用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> 
+0

你使用什麼模型? XmlDocument的?的XDocument?什麼? – 2009-06-04 07:48:47

+0

(回覆評論) – 2009-06-04 08:00:58

+0

爲什麼你不想編碼? – AnthonyWJones 2009-06-04 08:01:40

回答

7

如果你想在文字"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 &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); 
+0

文本來自一個設置,它必須以文本或XML格式插入。最終的XML不應該包含CDATA部分。 – Drejc 2009-06-04 07:56:12

+0

然後我希望你想要InnerXml以上... – 2009-06-04 08:00:50

+0

外部和內部的Xml做的伎倆,我認爲它會工作的額外的邏輯。 – Drejc 2009-06-04 08:20:18

1

將它插入CDATA部分:

<![CDATA[some <b>bolded</b> text]]> 
0

使用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」節點的內容現在實際上是三個節點。

相關問題