0

我想制作一个 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");

我得到一个例外,上面写着“附加信息:‘数字’是一个重复的属性名称。”

请问有什么建议吗?

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

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

请问有什么建议吗?

感谢您的时间!

4

3 回答 3

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();

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

如果你这样做,你还可以创建一个具有属性“Number”的抽象基类“Guest”。在基本的 Read 和 WriteXml 中,您只需对这个属性进行反序列化/序列化,并且您不必在每个额外的“访客类型”中重复自己,例如儿童或成人......

于 2013-09-06T06:51:06.817 回答
0

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

于 2013-09-05T15:03:19.617 回答
0

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

从 xml 规范第 3.1 节:

格式良好的约束:唯一的 Att Spec

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

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

于 2013-09-05T15:08:36.643 回答