1

我正在使用 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)(以树的形式),这棵树的每个节点都有一些可以进一步包含节点的属性。我将这个对象保存在 Xml 中。为此,我正在使用 XmlWriter。在运行时,我遍历 obj 并使用 GetType().Name 读取节点的类型并将其传递给写入 XmlNode 并使用GetType().GetProperties()我获取该节点的所有属性,然后我使用 foreach 一个一个地遍历 PropertyInfo 数组并将 PropertyInfo 的名称写为属性,但如果我有一个分配了节点的属性,我需要为此编写上面的点表示法。我正在寻找一种方法,我将只传递我的 PropertyInfo 和对象,它会以所需的格式为我编写。

谢谢你的帮助!

编辑2:

对于一个特定的节点,我有像高度和宽度这样的属性,比如作为集合的子节点,它隐式地驻留在 Xml 的层次结构中,像资源一样,它也将具有一些属性,每个属性都将由父节点下的节点表示。但是虽然保存会这样写:

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

感谢帮助!

4

3 回答 3

4

什么会比 更清洁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 的层次结构中吗?

于 2009-12-28T12:09:47.873 回答
0

没有“点符号”之类的东西。您似乎指的是 XAML。除了 XAML,XML 中没有“点符号”之类的东西。这就是为什么你没有找到任何支持它的原因——它不存在。

于 2009-12-29T04:47:04.367 回答
0

最后,我最终以这种方式使用了这个 string.Format。这里 :

WriteXml(XmlWriter writer, Transform sender)
{
    string elementName = sender.GetType.Name;
    writer.WriteStartElement(elementName);   
    ............................
    ............................
    //and for each property inside a foreach
    writer.WriteStartElement(GetDotElement(elementName, propertyName));
}

private string GetDotElement(string elementName, string propertyName)
{
    return string.Format("{0}.{1}", elementName, propertyName);
}

谢谢你帮助我!!

于 2010-01-01T11:20:30.273 回答