C#将元素添加到现有XML

时间:2018-10-29 12:16:04

标签: c# .net xml

类似问题的答案对我没有帮助;或我缺少非常明显的东西。

我想将<value>元素添加到XML的<question>元素中,其结构如下:

<form>
    <foo>
        <bar>
            <question id="1">...</question>
            <question id="2">...</question>
        </bar>
    </foo>
</form>

其他问题似乎集中在将元素添加到根元素中,但是我试图根据属性值将我的元素进一步添加到树中。我尝试了以下无效的方法:

XDocument newFormTemplateXML = XDocument.Load("newFormTemplate.xml");
XElement newValue = new XElement("value", 123);
newFormTemplateXML
    .Descendants()
    .Where(d => d.Name.ToString().Equals("question") && d.Attribute("id").Equals(1))
    .Append(newValue);
newFormTemplateXML.Save("test.xml");

我没有收到错误消息。有人可以在正确的道路上帮助我吗?

2 个答案:

答案 0 :(得分:3)

使用“本机”方法:

newFormTemplateXML
    .Descendants("question")
    .Single(q => (int) q.Attribute("id") == 1)
    .Add(newValue);

或者,对于XPath爱好者:

newFormTemplateXML.XPathSelectElement("//question[@id=1]").Add(newValue);

请注意,这并不能验证id 1确实只有一个问题,它只会修改第一个此类问题。 Single()调用没有此问题/优点。

答案 1 :(得分:0)

Append并没有您认为的那样。 Append将新项目添加到序列的末尾,而您不想添加到后代。

this.input.keyboard.on('keydown', function (event) {
    event.preventDefault();
    event.stopImmediatePropagation();
    //confirm menu when key code is back key
}