0

以下のようなxmlがあります

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

これで追加するパスと値ができましたが、それは動的です。次のようになります

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

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

パスが存在する場合は値を追加する必要があり、そうでない場合は値を変更します。

パスを分割して、どのノードが存在し、何を追加する必要があるかを見つけるためにループすることができますが、これを行うよりエレガントな方法があると思います.これを解決するための最良の方法を教えてください?

編集注 - XDocument と XElement を優先します。

私がきちんと説明していないのかもしれません。私のxmlとノードパスは両方とも動的です。xml から複数のノードが欠落している場合があります。問題は、xml に存在するノードと、作成する必要があるノードを特定する必要があることです。

ありがとう

4

1 に答える 1

0

「Sample1」ノードが常に存在する場合、コードは次のようになります。

    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";
        }

    }
于 2016-09-15T09:47:40.813 に答える