tags:

views:

275

answers:

2

Hi, I'm using XmlReader with an attached XSD for validation.

As my XML document is being read and validated, I want to determine in my C# code the 'maxLength' value specified in the XSD for a particular element. For example, my XSD fragment is very simply defined as:

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

I can get the 'minOccurs' value easily using:

myReader.SchemaInfo.SchemaElement.MinOccurs;

But how do I get the 'maxLength' value (value of 10 in my example fragment above)???

I thought 'myReader.SchemaInfo.SchemaElement.Constraints' might give me this information, but that collection always has a 'Count' of zero.

Thanks,

Pat.

A: 

There are ways to do so with myReader.SchemaInfo (see najmeddine's response), but in case you need to access stuff not exposed in the SchemaInfo object...

..XSD being an XML Language. You can simply load the XSD file and using XPath find the "testing" element's definition, and its maxLength.

mjv
It would be nice if you could just punch in to the SchemaInfo, since that information appears to be already present in the reader.
Robert Harvey
Agreed, Robert. It seems najmeddine solution's pointing in this direction however the object model of SchemaInfo isn't all that well documented (at least I havn't found the right documents), and hence the idea to just "snap it off" the XSD, in the somewhat tedious but well worn way of the plain XML DOM.
mjv
+1  A: 

you'll find here:Accessing XML Schema Information During Document Validation a good explanation of how to do this & more.

najmeddine
+1 Not sure if it solves the OP's problem, but very useful information nonetheless.
Robert Harvey
Yahoo - got it working, this answer was exactly the information I needed! Although my code is complicated a bit by not being able to get this info. of the 'Text' node, and so having to skip ahead to the 'EndElement' node - but what the hell, it's working now. Thanks a million!!
Pat McBennett