我注意到XElement
是一个类,所以我尝试了以下代码:
var doc = new XDocument(
new XDeclaration("1.0", "utf8", "yes"),
new XElement("Root")
);
var root = doc.Root;
var com = new XElement("Component", new XAttribute("name", "arm"));
root.Add(com);
root.Add(com);
root.Add(com);
com.Add(new XAttribute("type", 1));
Console.WriteLine(doc);
但是输出结果为:
<Root>
<Component name="arm" type="1" />
<Component name="arm" />
<Component name="arm" />
</Root>
我还尝试了SetAttributeValue()
,并得到了相同的结果。
为什么type属性只附加在第一个组件上?
XNode
或XAttribute
对象,新内容没有父级,则这些对象将被简单地附加到 XML 树上。如果新内容已经具有父级并且属于另一个 XML 树,则会克隆新内容,并将新克隆的内容附加到 XML 树上。如果您考虑一下,试图维护引用语义将导致非常不直观的结果,当询问文档顺序时。 - Jeroen Mostertroot.Add(com);
之前放置com.Add(new XAttribute("type", 1));
,而不是之后呢? - AuditiveCloneNode()
方法(因为com
的父级将被设置)。通过修改com
实例,您只会更改未克隆的第一个节点。 - Sinatr