在XML文件C#

时间:2015-09-14 08:21:36

标签: c# xml

我有以下XML文件:

<?xml-stylesheet type="text/xsl" href="transform.xslt"?>
<Root>
 <Notes>
    <Note>
    <date>1997-07-04T00:00:00</date>
    </Note>
    <Note>
      <date>1997-07-04T00:00:00</date>
    </Note>
</Notes>
</Root>

不,我想像下面的代码一样向这个XML添加元素:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="transform.xslt"?>
<Root>
 <Notes>
    <notedate date="date here"><Note>
    <date>1997-07-04T00:00:00</date>
    </Note></notedate>
    <notedate date="date here"><Note>
      <date>1997-07-04T00:00:00</date>
    </Note></notedate>
</Notes>
</Root>

如您所见,我想将<Note>封装在<notedate> - 元素内。

如何在C#中指定将新元素(包括开始和结束标记)添加到XML文件的位置?

我正在使用XDocument。

2 个答案:

答案 0 :(得分:0)

这里演示了一个简单的案例:link

以下是代码段:

XmlDocument doc = new XmlDocument();
doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" +
            "<title>Pride And Prejudice</title>" +
            "</book>");

XmlNode root = doc.DocumentElement;

//Create a new node.
XmlElement elem = doc.CreateElement("price");
elem.InnerText="19.95";

//Add the node to the document.
root.AppendChild(elem);

Console.WriteLine("Display the modified XML...");
doc.Save(Console.Out);

答案 1 :(得分:0)

您实际上希望将每个Note元素与另一个元素包装在一起,一个选项是使用ReplaceWith

var noteElements = doc.Root.Descendants("Note").ToList();

foreach(XElement noteEl in noteElements)
{
    string noteDateValue = noteEl.Element("date").Value;
    noteEl.ReplaceWith(new XElement("notedate", noteEl, new XAttribute("date", noteDateValue)));
}
// your doc is now updated