我想创建一个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>
有什么建议吗?
感谢您的时间!
答案 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
属性名称不得在同一个开始标记中出现多次 或空元素标签。