Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向xml文件添加信息_C#_Xml - Fatal编程技术网

C# 向xml文件添加信息

C# 向xml文件添加信息,c#,xml,C#,Xml,我有一个XML文件,其中包含大约850个XML节点。像这样: <NameValueItem> <Text>Test</Text> <Code>Test</Code> </NameValueItem> ........ 849 more 我想在每个节点中添加一个新的子节点。所以我就这样结束了: <NameValueItem> <Text>Test</Text&

我有一个XML文件,其中包含大约850个XML节点。像这样:

<NameValueItem>
   <Text>Test</Text>
   <Code>Test</Code>
</NameValueItem>

........ 849 more
我想在每个节点中添加一个新的子节点。所以我就这样结束了:

    <NameValueItem>
       <Text>Test</Text>
       <Code>Test</Code>
       <Description>TestDescription</Description>
    </NameValueItem>

........ 849 more
我尝试了以下方法:

XmlDocument doc = new XmlDocument();
doc.Load(xmlPath);
XmlNodeList nodes = doc.GetElementsByTagName("NameValueItem");

这给了我所有的节点,但从这里开始,我陷入了困境(我想我需要迭代所有节点并附加到每个节点上)有任何示例吗?

如果您不想使用适当的类(即XDocument)解析XML,您可以使用Regex找到一个插入标记并插入它的位置:

        string s = @"<NameValueItem>
                        <Text>Test</Text>
                        <Code>Test</Code>
                    </NameValueItem>";

        string newTag = "<Description>TestDescription</Description>";
        string result = Regex.Replace(s, @"(?<=</Code>)", Environment.NewLine + newTag);
但是最好的解决方案是Linq2XML(它比现在不推荐使用的简单XmlDocument要好得多)


你需要一些与下面这个例子类似的东西。在每个节点上,都需要创建一个新元素以添加到其中。我假设
InnerText
属性将获得不同的值,但我只是使用了您的示例

foreach (var rootNode in nodes)
{
    XmlElement element = doc.CreateElement("Description");
    element.InnerText = "TestDescription";
    root.AppendChild(element);
}

您应该能够在XmlNodeList上使用
foreach
循环,并将节点插入到每个XmlNode中:

foreach(XmlNode node in nodes)
{
    node.AppendChild(new XmlNode()
                         {
                              Name = "Description",
                              Value = [value to insert]
                         });
 }
这也可以通过使用LINQ到XML的XDocument来实现,例如:

XDocument doc = XDocument.Load(xmlDoc);
var updated = doc.Elements("NameValueItem").Select(n => n.Add(new XElement() { Name = "Description", Value = [newvalue]}));
doc.ReplaceWith(updated);
XDocument doc = XDocument.Load(xmlDoc);
var updated = doc.Elements("NameValueItem").Select(n => n.Add(new XElement() { Name = "Description", Value = [newvalue]}));
doc.ReplaceWith(updated);