我正在使用XmlWriter在C#中编写XML文件。我可以使用WriteStartElement()方法编写元素,并且可以使用WriteAttributeString()方法向该元素添加属性。但是,如果我想使用点表示法添加属性,那该怎么做?

<Element Attribute1="Value">
    <Element.Attribute2>       //How can i add attribute in this Notation.
          //Add Value of Attribute2
    </Element.Attribute2>
</Element>


我知道可以打电话给WriteStartElement("Element.Attribute"),但我正在寻找一种更清洁的方法。还有其他方法吗?

编辑1:

我有一个分层的对象(例如obj)(以Tree的形式),该树的每个节点都具有一些可以进一步包含节点的属性。我将此对象保存在Xml中。为此,我正在使用XmlWriter。在运行时,我遍历obj并使用GetType()。Name读取节点的类型,并将其传递以编写XmlNode并使用GetType().GetProperties()获得该节点的所有属性,然后使用foreach遍历PropertyInfo数组一个接一个地写上PropertyInfo的Name作为属性,但是如果我有一个分配了节点的属性,则需要为此编写上面的点表示法。我正在寻找一种方法,该方法将只传递我的PropertyInfo和对象,并且它将以所需的格式为我编写。

谢谢你的帮助!

编辑2:

对于特定的节点,我具有“高度”和“宽度”之类的属性,例如“儿童”是一个Collection,并且隐式地驻留在Xml的层次结构中,而“资源”也将具有一些属性,并且每个属性都由父级下的节点表示。
但是在保存的时候会这样写:

<Parent.Resources>
    <Resource1 ...../>
    <Resource2 ...../>
</Parent.Resources>


感谢帮助!

最佳答案

有什么比WriteStartElement("Element.Attribute")更干净的?它准确地描述了您正在执行的操作-使用该名称创建一个新元素。

如果您确实想使用XmlWriter,我会坚持使用这种方法。正如Henrik所说,LINQ to XML通常是首先创建XML的更简单方法:

XElement element = new XElement("Element",
    new XAttribute("Attribute1", "Value"),
    // This could contain nested elements instead of just a text node
    new XElement("Element.Attribute2", "Second value")
);


编辑:现在您更新了问题,我仍然看不到您为什么要使用此“点符号”。它不是隐含在XML的层次结构中吗?

09-06 04:58