如何选择特定的子节点并在其中添加新的子节点

时间:2019-02-06 17:21:49

标签: c# xml

我是XML初学者,由于这个问题已经使我困扰了几个小时,我真的需要您的帮助。

我正在使用C#并编写一些代码来控制我的XML。 现在我有一个

string StrSec = "Scetion A"

我的代码如下:

XmlDocument doc = new XmlDocument();
doc.LoadXml(myPath);

在这里我想做这样的事情:

Check each of sections in current XML, if section.name == StrSec 

然后将新案例放入该特定部分

if section.name != StrSec, then put case into Section B
XmlElement newCase = doc.CreateElement("case");
XmlElement newName= doc.CreateElement("name");
newName.InnerText = "Case 4";
XmlElement newDes= doc.CreateElement("description");
newDes.InnerText = "something here";

newCase .AppendChild(newName);
newCase .AppendChild(newDes);

这是当前的XML

<?xml version="1.0" encoding="UTF-8"?>
<suite>
    <sections> 
        <section>
            <name>Section A</name>
            <cases>
                <case>
                    <name>Case 1</name>
                    <description>something here</description>
                </case>
                <case>
                    <name>Case 2</name>
                    <description>something here</description>
                </case>                    
            </cases>
        </section>
        <section>
            <name>Section B</name>
            <cases>
                <case>
                    <name>Case 3</name>
                    <description>something here</description>
                </case>                
            </cases>
        </section>          
    </sections>
</suite>

最终结果应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <suite>
        <sections> 
            <section>
                <name>Section A</name>
                <cases>
                    <case>
                        <name>Case 1</name>
                        <description>something here</description>
                    </case>
                    <case>
                        <name>Case 2</name>
                        <description>something here</description>
                    </case>
                    <case>
                        <name>Case 4</name>
                        <description>something here</description>
                    </case>
                </cases>
            </section>
            <section>
                <name>Section B</name>
                <cases>
                    <case>
                        <name>Case 3</name>
                        <description>something here</description>
                    </case>                
                </cases>
            </section>          
        </sections>
    </suite>

谢谢。

1 个答案:

答案 0 :(得分:0)

使用XDocument代替XmlDocument(因为使用起来稍微容易一些):

var doc = XDocument.Parse(text);
foreach (var section in doc.Descendents("section").Where(x => x.Element("name").Value == "Section A"))
{
    section.Element("cases").Add(
        new XElement("case",
            new XElement("name", "Case 4"),
            new XElement("description", "something here")
        )
    );
}

您可以在XElement here上找到更多文档。