2009-10-20 44 views
3

我正在使用带有附加XSD的XmlReader进行验证。在C#中,如何确定元素的XSD定义的MaxLength

随着我的XML文档正在被读取和验证,我想在我的C#代码中确定XSD中为特定元素指定的'maxLength'值。例如,我的XSD片段非常简单的定义为:

<xsd:element name="testing" minOccurs="0"> 
    <xsd:simpleType> 
     <xsd:restriction base="xsd:string"> 
      <xsd:maxLength value="10"/> 
     </xsd:restriction> 
    </xsd:simpleType> 
</xsd:element> 

我可以很容易地得到“的minOccurs”值使用:

myReader.SchemaInfo.SchemaElement.MinOccurs; 

但我怎么得到“最大长度”值(值10在我的例子片段上面)

我以为'myReader.SchemaInfo.SchemaElement.Constraints'可能会给我这个信息,但是这个集合总是有一个'计数'为零。

感谢,

专利

回答

5

你会发现在这里:Accessing XML Schema Information During Document Validation如何做到这一点的好解释&更多。

+0

+1不确定它是否解决了OP的问题,但仍然是非常有用的信息。 – 2009-10-20 16:55:58

+0

雅虎 - 得到它的工作,这个答案正是我需要的信息!虽然我的代码由于无法获取此信息而变得复杂了一点。 '文本'节点,所以不得不跳到'EndElement'节点 - 但到底什么,它现在正在工作。太感谢了!! – 2009-10-20 17:38:42

+0

2年后,这个答案仍然是我在SchemaInfo对象模型中找到的最好的信息。对于希望了解SchemaInfo对象的任何人来说,这都是很好的链接。需要一些工作来修改它以满足您的需求,但这是迄今为止我找到的唯一方法 – psubsee2003 2011-11-05 15:46:55

1

有办法与myReader.SchemaInfo这样做(见najmeddine的反应),但如果你需要访问的东西在SchemaInfo对象不外露......

..XSD是一个XML语言。您可以简单地加载XSD文件,然后使用XPath查找“测试”元素的定义以及其maxLength。

+0

如果你可以插入到SchemaInfo中,那很好,因为这些信息似乎已经存在于读者中。 – 2009-10-20 16:48:30

+0

同意,罗伯特。看起来najmeddine解决方案指向了这个方向,但是SchemaInfo的对象模型并没有被很好地记录(至少我没有找到正确的文档),因此也就是将XSD“折断”的想法简单的XML DOM有点繁琐而且破旧。 – mjv 2009-10-20 17:00:43

相关问题