4

XML ノードを複数の親ノード (同じ名前) に追加しようとしています。ただし、XML の最後のノードに追加するだけであり、すべてではありません。

入力 XML

<Record>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
 </Emp>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
 </Emp>
</Record>

すべての Emp ノードに Location 要素を追加したいと考えています。私のコードは以下の通りです:

XmlNodeList xNodeList = doc.SelectNodes("/Record/Emp");
XmlElement xNewChild = doc.CreateElement("Location");
        xNewChild.InnerText = "USA";
        foreach (XmlNode item in xNodeList)
        {
            item.AppendChild(xNewChild);
        }
doc.Save(path);

しかし、私は次のような出力を得ています:

 <Record>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
 </Emp>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
  <Location>USA</Location>
 </Emp>
</Record>

Location 要素が最初の Emp ノードに追加されていません。

注: デバッグ後、最初の Emp ノードにも要素が追加されていることがわかりました。しかし、保存された XML ファイルでは、この奇妙な動作が見られます。

4

1 に答える 1

1

あなたxNewChildは単一の新しい要素です。複数のノードに追加するだけでは、最後のノードにのみシリアル化されます。次のような変更が機能するはずです。

XmlNodeList xNodeList = doc.SelectNodes("/Record/Emp");
foreach (XmlNode item in xNodeList)
{
  XmlElement xNewChild = doc.CreateElement("Location");
  xNewChild.InnerText = "USA";
  item.AppendChild(xNewChild);
}
doc.Save(path);
于 2012-10-22T20:35:56.120 に答える