我有这个示例 XSD。它可以工作,但是当发生验证错误时,它会显示如下所示的错误。我也想要字段名称:
验证错误:'FIELD'元素无效 - 根据其数据类型'Union',值'12345'无效 - 根据联合的任何成员类型,值'12345'无效。
扩展数据文件
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="DOCUMENTS">
<xs:complexType>
<xs:sequence>
<xs:element name="DOCUMENT">
<xs:complexType>
<xs:sequence>
<xs:element name="FORM" type="xs:string"/>
<xs:element name="HEADER">
<xs:complexType>
<xs:sequence>
<xs:element name="FIELD" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="FieldValueType">
<xs:attribute name="name" type="FieldNameType" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TABLES" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="FieldNameType">
<xs:restriction base="xs:string">
<xs:enumeration value="CALC_FILE"/>
<xs:enumeration value="SQL_ORGNO"/>
<xs:enumeration value="SQL_RECEIVER"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FieldValueType">
<xs:union memberTypes="CALC_FILEType SQL_ORGNOType SQL_RECEIVERType"/>
</xs:simpleType>
<xs:simpleType name="CALC_FILEType">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z ]+"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SQL_RECEIVERType">
<xs:restriction base="xs:string">
<xs:pattern value="[A-Za-z ]+"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SQL_ORGNOType">
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
XML
<?xml version="1.0" encoding="utf-8"?>
<DOCUMENTS>
<DOCUMENT>
<FORM>Development_template_DfD_1.8</FORM>
<HEADER>
<FIELD name="CALC_FILE">test</FIELD>
<FIELD name="SQL_ORGNO">12345</FIELD>
<FIELD name="SQL_RECEIVER">Test AS</FIELD>
</HEADER>
<TABLES />
</DOCUMENT>
</DOCUMENTS>
如果您验证像这样的树
XmlDocument
并深入挖掘以XmlSchemaValidationException
从验证异常中获取,您可以将其转换SourceObject
为XmlNode
并读出它OuterXml
(或者当然是某些属性,如果需要,例如{((e.Exception as XmlSchemaValidationException).SourceObject as XmlNode).Attributes["name"].Value}
)):对于无效样本,例如
例如输出