使用XmlWriter具有多个具有不同值的相同属性

时间:2013-09-05 14:40:43

标签: c# xmlwriter

我想创建一个xml文件(使用带有XmlWriter的c#),我需要有2个或更多具有不同属性值的元素。例如:

<MyGuest Type = "Adult" Number = "2">
<MyGuest Type = "Child" Number = "1" Age = "12">

这是可以用XmlWriter完成的吗?当我使用

 writer.WriteAttributeString("Number","2");
    writer.WriteAttributeString("Type","Aduld");


    writer.WriteAttributeString("Age","12");
    writer.WriteAttributeString("Number","1");
    writer.WriteAttributeString("Type","Child");

我得到的例外情况是&#34;其他信息:&#39; Number&#39;是一个重复的属性名称。&#34;

请问任何建议?

所以似乎错误地提出了这个问题。我想在xml文件中为该属性添加不同的值,因此它看起来像这样:

<Guests>
   <MyGuest Type = "Adult" Number = "2">
   <MyGuest Type = "Child" Number = "1" Age = "12">
</Guests>

有什么建议吗?

感谢您的时间!

3 个答案:

答案 0 :(得分:1)

我觉得这样的事情就是你想要的:

writer.WriteStartElement("MyGuest");
writer.WriteAttributeString("Type","Adult");
writer.WriteAttributeString("Number","2");
writer.WriteEndElement();

writer.WriteStartElement("MyGuest");
writer.WriteAttributeString("Type","Child");
writer.WriteAttributeString("Age","12");
writer.WriteAttributeString("Number","2");
writer.WriteEndElement();

但通常最好更多地了解您的用例。您要序列化儿童和成人课程吗?然后我建议你们这些类应该实现IXmlSerializable。这会强制类型实现Read和WriteXml方法。在这些方法中,您可以放置​​逻辑并从外部调用它们。如果添加新类型,这将为您提供更松散的耦合和更灵活性。那么你不必每次都改变你的“单方法序列化”。您只能在它所属的新类中实现新行为。

如果你这样做,你也可以制作一个具有“Number”属性的抽象基类“Guest”。在基础Read和WriteXml中你只需要/序列化这个属性,你就不必在每个额外的“客人类型”中重复自己,比如孩子或成人......

答案 1 :(得分:0)

您不能这样做:属性名称不能在同一元素中多次使用。 无论您使用何种方式来实现目标 - 结果都不是有效的XML。

答案 2 :(得分:0)

格式良好的XML不能在元素上包含重复的属性。

从xml规范部分3.1:

  

良构性约束:唯一的Att Spec

     

属性名称不得在同一个开始标记中出现多次   或空元素标签。

http://www.w3.org/TR/REC-xml/#sec-logical-struct