2012-09-07 24 views
0

我基本上想知道如何在另一個XmlDocument中插入XmlDocument。Xml中的Xml

第一個XmlDocument將具有基本的頁眉和頁腳標籤。 第二個XmlDocument將是必須插入到第一個XmlDocument中的主體/數據標記。

  string tableData = null; 
      using(StringWriter sw = new StringWriter()) 
      { 
       rightsTable.WriteXml(sw); 

       tableData = sw.ToString();      
      } 

      XmlDocument xmlTable = new XmlDocument(); 
      xmlTable.LoadXml(tableData); 

      StringBuilder build = new StringBuilder(); 
      using (XmlWriter writer = XmlWriter.Create(build, new XmlWriterSettings { OmitXmlDeclaration = true })) 
      { 
       writer.WriteStartElement("dataheader"); 

       //need to insert the xmlTable here somehow 

       writer.WriteEndElement(); 
      } 

有沒有更容易的解決方案呢?

+1

那麼把它包括爲CDATA呢? – jtheman

+0

在外部XML節點內使用CDATA節,您將放置內部XML文檔。 –

回答

1

在文檔解析器中使用importNode功能。

+0

'importNode'應該實現什麼? – Oded

1

您將需要在CDATA部分編寫內部XML文件。

對於這樣的節點使用writer.WriteCData,將內部XML作爲文本傳入。

writer.WriteCData(xmlTable.OuterXml); 

另一種選擇(thanks DJQuimby)是編碼XML一些XML兼容格式(說的base64) - 注意,編碼中使用的必須是XML兼容,一些編碼方案將增加的大小編碼的文件(base64增加〜30%)。

+0

我不想自己提供答案,因爲我之前沒有做過這種事情,但是OP可以將內部xml編碼成XmlDocument中的元素嗎? –

+0

@DJQuimby - 這是另一種選擇。 – Oded

1

我不知道你真正需要的,但這能說明如何合併兩個XML文檔(使用Linq2xml )

string xml1 = 
    @"<xml1> 
    <header>header1</header> 
    <footer>footer</footer> 
    </xml1>"; 

string xml2 = 
    @"<xml2> 
    <body>body</body> 
    <data>footer</data> 
    </xml2>"; 

var xdoc1 = XElement.Parse(xml1); 
var xdoc2 = XElement.Parse(xml2); 

xdoc1.Descendants().First(d => d.Name == "header").AddAfterSelf(xdoc2.Elements()); 

var newxml = xdoc1.ToString(); 

輸出

<xml1> 
    <header>header1</header> 
    <body>body</body> 
    <data>footer</data> 
    <footer>footer</footer> 
</xml1>