将新元素添加到xml树的特定部分

时间:2017-01-24 02:55:08

标签: c# xml

我需要在xml树的特定部分添加一个新元素,但我无法使其工作。

这是我的xml输入

    <structMap LABEL="Logical Structure" TYPE="LOGICAL">
  <div ID="DIVL1" TYPE="CONTENT">
    <div ID="DIVL2" TYPE="" DMDID="MODSMD_ARTICLE1" LABEL="">
      <div ID="DIVL3">
        <div ID="DIVL31" TYPE="TITLE" />
      </div>
    </div>
  </div>
</structMap>

这是我想要的输出

   <structMap LABEL="Logical Structure" TYPE="LOGICAL">
  <div ID="DIVL1" TYPE="CONTENT">
    <div ID="DIVL2" TYPE="" DMDID="MODSMD_ARTICLE1" LABEL="">
      <div ID="DIVL3">
        <div ID="DIVL31" TYPE="TITLE">
        <fptr>
          <area BETYPE="IDREF" FILEID="ALTO0011" BEGIN="P11_TB3"/>
        </fptr>
        </div>
      </div>
    </div>
  </div>
</structMap>

这是我的代码

var b = dc.Descendants().Attributes("TYPE").Where(ee => ee.Value == "TITLE").First();

我没有b.AddFist。我怎样才能使它发挥作用?

2 个答案:

答案 0 :(得分:1)

Usse xml linq:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            XDocument doc = XDocument.Load(FILENAME);

            XElement title = doc
               .Descendants("div")
               .Where(x => (string)x.Attribute("TYPE") == "TITLE")
               .FirstOrDefault();

            title.Add(new XElement("fptr", new object[] {
               new XElement("area", new object[] {
                   new XAttribute("BETYPE","IDREF"),
                   new XAttribute("FILEID","ALTO0011"),
                   new XAttribute("BEGIN","P11_TB3")
               })
            }));
        }
    }
}

答案 1 :(得分:1)

当然,假设您正在使用LINQ to XML,那么您不会b.AddFirst()就不足为奇了。 bXAttribute,而不是XElement

看起来你正在寻找b.Parent.AddFirst()