使用灵活数量的属性反序列化XML文件

时间:2013-12-11 14:08:18

标签: c# xml xml-serialization xsd

我有一个xml文件,其中一些节点可以具有灵活数量的属性,所有属性都以相同的前缀开头:

<node a1="" a2="" ... an=""></node>
  1. 我如何在XML Schema中反映这一点?
  2. 将此类xml文件反序列化为C#中的对象的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

关于第二个问题 - 您可能希望将这些节点存储在例如字符串数组或Dictionary<string,string>将属性名称映射到值,使用XmlSerializer进行序列化,并在类中实现IXmlSerializable接口以手动读取和写入XML。

答案 1 :(得分:1)

Afaik,你不能直接在XML Schema中反映出来;必须按名称声明每个属性。您可以在Schematron中表达它,但不能在DTD或XSD中表达;不确定RelaxNG。

如果想要声明“名称为'a'后跟数字的任何属性”,那就像尝试在编程语言或数据库中的字段中声明一组类似的变量一样。很少有办法为这样的(可能是无限的)集合做“元”声明。

如果你可以施加一个最大值,比如99个这样的属性,你可以单独声明所有这些 - 但这非常难看,并且不能保证元素会按顺序使用它们。

如果这些属性的值只是标记(数字,名称或类似),则“XML-ish”方式将声明一个IDREFS或NMTOKENS类型的属性,该属性允许任意数量的此类标记。值。

一旦你获得了这些值,就像Soontz说的那样,数组或字典/哈希是一个合理的地方来保留它们。

相关问题