2012-07-30 84 views
0

我有兩個XML文檔。 我的目標是將第一個文檔中的一個節點替換爲第二個Xml文檔的全部內容。 所以第一個文件 - 家長看起來是這樣的:將XML元素與LINQ合併

<Root> 
    <AgencyName = "Some Agency"/> 
    <Originator = "Some other Agency"/> 
    <Type = "AnonymousType"/> 
    <Details/> 
</Root> 

第二份文件 - 兒童看起來是這樣的:

<Root> 
    <Details> 
     <Detail1> 
      ... 
     </Detail1> 
     <Detail2> 
      ... 
     </Detail2> 
     <Detail3> 
      ... 
     </Detail3> 
    </Details> 
</Root> 

節點<Details/>必須與內容被替換第二份文件。 我正在嘗試使用Linq來執行此操作。第一個文檔用XDocument類表示,第二個文檔用XElement類表示。 <Detail/>有幾個子屬性,我沒有在這裏列出。

我試圖用這個XElement類替換第一個文檔中的元素。 如果我嘗試這樣的事情,

ParentDoc.Element("Details").ReplaceAll(children); 

這是不可能的工作。 我應該怎麼做替換?

+1

忽略了一個事實,你的父母XML是無效的:'parentDoc.Root.Element( 「詳細信息」 ).ReplaceAll(childDoc.Root.Element(「Details」)。Elements())'爲什麼這個「不太可能工作?」 – 2012-07-30 18:51:06

+0

對不起,關於XML。我輸入它並沒有意識到我必須關閉標籤。 @RaphaëlAlthaus擁有正確的XML。 – abhi 2012-07-30 18:54:59

+0

@ColeCampbell我在我的代碼和你的代碼上都得到了NullReferenceException。 – abhi 2012-07-30 19:15:19

回答

1
var doc = XDocument.Load(@"C:\Tools\test.xml"); 
var doc2 = XDocument.Load(@"C:\Tools\test2.xml"); 
var children = doc2.Root.Element("Details"); 
var parentNode = doc.Root.Element("Details"); 
parentNode.ReplaceWith(children); 

順便說一句,你的XML不正確,所以你會得到例外。

我試着用

<Root> 
    <AgencyName name= "Some Agency"/> 
    <Originator name= "Some other Agency"/> 
    <Type name= "AnonymousType"/> 
    <Details/> 
</Root> 

<Root> 
    <Details> 
     <Detail1> 
      asdf 
     </Detail1> 
     <Detail2> 
      asde 
     </Detail2> 
     <Detail3> 
      eere 
     </Detail3> 
    </Details> 
</Root> 

,並得到

<?xml version="1.0" encoding="utf-8"?> 
<Root> 
    <AgencyName name="Some Agency" /> 
    <Originator name="Some other Agency" /> 
    <Type name="AnonymousType" /> 
    <Details> 
    <Detail1> 
      asdf 
     </Detail1> 
    <Detail2> 
      asde 
     </Detail2> 
    <Detail3> 
      eere 
     </Detail3> 
    </Details> 
</Root>