在XML文档中设置属性

时间:2009-02-26 04:00:34

标签: c# xml

我正在编写我的第一个C#程序。这就是我想要做的事情:

  • 打开XML文档
  • 导航到XML树的一部分,然后选择<myType>
  • 类型的所有子元素
  • 对于每个<myType>元素,更改属性(因此<myType id="oldValue">将成为<myType id="newValue">
  • 将此修改后的XML文档写入文件。

我找到了XmlDocument.SelectNodes方法,该方法将XPath表达式作为其参数。但是,它返回XmlNodeList。我读了一下XML节点和XML元素之间的区别,这似乎解释了为什么没有XmlNode.SetAttribute方法。但有没有办法可以使用我的XPath表达式来检索XmlElement个对象的列表,这样我就可以遍历这个列表并为每个对象设置id属性?

(如果有其他更简单的方法,请告诉我。)

3 个答案:

答案 0 :(得分:2)

简单 - 它不知道您是否正在阅读元素或属性。很可能,你需要的只是一个演员:

foreach(XmlElement el in doc.SelectNodes(...)) {
    el.SetAttribute(...);
}

SelectNodes返回一个XmlNodeList,但上面将每个视为一个XmlElement。

答案 1 :(得分:1)

我是System.Xml.Linq.XDocument的忠实粉丝及其提供的功能。

XDocument xDoc = XDocument.Load("FILENAME.xml");

// assuming you types is the parent and mytype is a bunch of nodes underneath
IEnumerable<XElement> elements = xdoc.Element("types").Elements("myType");

foreach (XElement type in elements)
{
    // option 1
    type.Attribute("id").Value = NEWVALUE;
    // option 2
    type.SetAttributeValue("id", NEWVALUE);
}

选项1或2有效,但我更喜欢2,因为如果该属性不存在,则会创建它。

答案 2 :(得分:0)

我坐在我的Mac上,所以没有.NET给我......

但是,我认为您可以通过显式转换将XmlNode强制转换为XmlElement。

您应该能够将XmlElement转换为XmlNode,然后使用类似XmlNode.ChildNodes的内容获取它的子节点。