我正在编写我的第一个C#程序。这就是我想要做的事情:
<myType>
<myType>
元素,更改属性(因此<myType id="oldValue">
将成为<myType id="newValue">
我找到了XmlDocument.SelectNodes
方法,该方法将XPath表达式作为其参数。但是,它返回XmlNodeList
。我读了一下XML节点和XML元素之间的区别,这似乎解释了为什么没有XmlNode.SetAttribute
方法。但有没有办法可以使用我的XPath表达式来检索XmlElement
个对象的列表,这样我就可以遍历这个列表并为每个对象设置id
属性?
(如果有其他更简单的方法,请告诉我。)
答案 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的内容获取它的子节点。