如何在xml文件中写点符号?

时间:2009-12-28 12:03:18

标签: c# xml xmlwriter writing

我正在使用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"),但我正在寻找更清洁的方法。还有其他办法吗?

EDIT1:

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

感谢您的帮助!

EDIT2:

对于特定节点,我有像Height和Width这样的属性,比如Children是一个Collection,它隐含在Xml的层次结构中,和Resources一样,它们也有一些属性,每个属性都由父节点下的节点表示。 但保存时会写成:

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

感谢您的帮助!

3 个答案:

答案 0 :(得分: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的层次结构中吗?

答案 1 :(得分:0)

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

答案 2 :(得分: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);
}

谢谢你的帮助!!