2016-09-15 83 views
0

爲xml我有一個像下面添加多個子節點使用XPath

<ProcessInvoice> 
    <ApplicationArea> 
    <CreationDateTime>2016-06-01 13:15:36</CreationDateTime> 
    <ApplicationGroup>BBEX</ApplicationGroup> 
    <MessageType>PROCESSINVOICE</MessageType> 
    </ApplicationArea> 
</ProcessInvoice> 

現在我有路徑和值添加XML,但它是動態的。 它可以像下面

path-/ProcessInvoice/ApplicationArea/UserArea/Sample1 
value-001 

path-/ProcessInvoice/ApplicationArea/UserArea/UserAreaLine/Sample1 
value-002 

路徑是否存在,那麼我要補充的價值,否則修改的值。

我可以拆分路徑並循環查找,直到找到了什麼節點以及我必須添加的內容,但我認爲可能有更優雅的方法來實現此目的。請幫助我解決此問題的最佳方法?

編輯 注 - 我更喜歡XDocument和XElement。

可能是我沒有正確解釋。 我的xml和節點路徑都是動態的。 有可能是我的XML中缺少多個節點的情況。 現在的問題是我需要確定哪些節點存在於xml中以及我需要創建哪些節點。

感謝

+0

爲每一個「UserArea」或「UserArea/UserAreaLine」只有一個「樣本」節點? –

+0

是的,這是真的。現在我們只有一個節點。 –

+0

「Sample1」節點總是存在? –

回答

0

如果「樣本」節點總是存在,代碼如下所示:

XmlDocument doc = new XmlDocument(); 
    doc.Load(FILE); 
    var userArea = DocumentElement["ProcessInvoice"]["ApplicationArea"]["UserArea"]; 

    foreach (XmlNode element in userArea.ChildNodes) 
    { 
     if (element.Name== "Sample1") 
     { 
      XmlNode node == element; 
      node.InnerText ="001"; 
     } 
     else if (element.Name == "UserAreaLine") 
     { 
      XmlNode node == element["Sample1"]; 
      node.InnerText ="002"; 
     } 

    }