我有以下XML文件,目前有100多个客户端节点,我想使用C#为每个节点添加元素。
我的XML文件结构如下:
<file_specs>
<client>
<account_number></account_number>
<client_name></client_name>
<file_type></file_type>
<file_extension></file_extension>
<file_hasdelimiter></file_hasdelimiter>
<file_delimiter></file_delimiter>
<central_one>false</central_one>
<central_code>none</central_code>
<central_two>false</central_two>
<c_two_code>none</c_two_code>
<header_line>true</header_line>
<has_quotes>true</has_quotes>
<start_line>1</start_line>
<has_one>true</has_one>
<one_column>2</one_column>
<has_two>true</has_two>
<two_column>12</two_column>
</client
我查看了其他答案,并尝试了各种解决方案。这个有效,但仅适用于第一个客户,其他所有客户都不受影响:
XDocument doc = XDocument.Load(@"c:/xmlconfig/sample.xml");
doc.Root.Element("client").Add(new XElement("testing", "none"));
我尝试添加一个foreach循环,它为每个客户端节点添加了一个测试元素,但是它将所有这些元素添加到第一个条目中,所有其余的都未被触及。
XDocument doc = XDocument.Load(@"c:/xmlconfig/miss.xml");
foreach (var client in doc.Descendants("client"))
{
doc.Root.Element("client").Add(new XElement("testing", "none"));
}
我在哪里错过了什么?
答案 0 :(得分:4)
您应该为每个客户添加新元素:
XDocument doc = XDocument.Load(@"c:/xmlconfig/miss.xml");
foreach (var client in doc.Descendants("client"))
{
// use current client
client.Add(new XElement("testing", "none"));
}
让我们看看这里发生了什么:
foreach (var client in doc.Descendants("client"))
{
doc.Root.Element("client").Add(new XElement("testing", "none"));
}
对于每个客户端,执行查询,该查询将根目录下的第一个客户端元素。然后将新元素添加到此第一个客户端。重复这么多次,就像xml中的客户端数量一样。并且最终测试元素添加到第一个客户端N次。