【发布时间】:2013-12-11 14:08:18
【问题描述】:
我有一个 xml 文件,其中一些节点可以具有灵活数量的属性,所有属性都以相同的前缀开头:
<node a1="" a2="" ... an=""></node>
- 如何在 XML 架构中反映这一点?
- 在 C# 中将此类 xml 文件反序列化为对象的最佳方法是什么?
【问题讨论】:
标签: c# xml xml-serialization xsd
我有一个 xml 文件,其中一些节点可以具有灵活数量的属性,所有属性都以相同的前缀开头:
<node a1="" a2="" ... an=""></node>
【问题讨论】:
标签: c# xml xml-serialization xsd
关于您的第二个问题 - 您可能希望将这些节点存储在例如字符串数组或在Dictionary<string,string> 中将属性名称映射到值,使用XmlSerializer 进行序列化,并在您的类中实现IXmlSerializable 接口以手动读取和写入XML。
【讨论】:
Afaik,您不能直接在 XML Schema 中反映这一点;每个属性都必须按名称声明。您可以在 Schematron 中表达它,但不能在 DTD 或 XSD 中表达;不确定RelaxNG。
如果想法是声明“任何名称为 'a' 后跟数字的属性”,这很像尝试在编程语言中声明一组类似的变量,或在数据库中声明字段。很少有办法为这样的(可能是无限的)集合进行“元”声明。
如果你可以施加一个最大值,比如 99 个这样的属性,你可以单独声明所有这些属性——但这很丑陋,并且不能保证一个元素会按顺序使用它们。
如果这些属性的值只是标记(数字、名称或类似),“XML-ish”的方式是声明一个 IDREFS 或 NMTOKENS 类型的属性,它允许在价值。
一旦您获得了值,正如 Soontz 所说,数组或可能的字典/哈希将是保存它们的明智之选。
【讨论】: