利用下面的程序对xml文件中具有相同节点名的节点添加属性,这个示例中有两个title节点
XmlDocument doc1 = new XmlDocument();
doc1.LoadXml("<book ISBN='xxxx'>" +
"<title>A</title>" +
"<title>B</title>" +
"</book>");
XmlAttribute newAttr = doc1.CreateAttribute("attr");
newAttr.Value = "value";
var titleNodes = doc1.GetElementsByTagName("title");
foreach (XmlNode title in titleNodes)
{
title.Attributes.Append(newAttr);
//title.Attributes.SetNamedItem(newAttr); ---- 此方法可以,只不过新属性成为了第一个位置
}
原xml文件
<?xml version="1.0"?>
<book ISBN="xxxx">
<title>A</title>
<title>B</title>
</book>
在给第一个title节点添加完属性后是这样的
<?xml version="1.0"?>
<book ISBN="xxxx">
<title attr="value">A</title>
<title>B</title>
</book>
接着给第二个title节点添加相同的一个属性,结果变成这样
<?xml version="1.0"?>
<book ISBN="xxxx">
<title>A</title>
<title attr="value">B</title>
</book>
第一个节点的属性没有添加成功,只给第二个节点添加了属性。
用程序中的title.Attributes.SetNamedItem(newAttr);倒是可以给所有节点添加属性,只是属性变为第一个位置
想问一下,.Attributes.Append(newAttr)方法为什么会出现上述现象
是每次操作完没有保存导致的吧