我正在针对XSD验证XML。这里没问题。但现在,我想知道我的限制哪个方面导致错误。
例如,有限制:
<xs:simpleType name="Max35Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
如果我的字符串长于35,我想在ValidationEventHandler上检索facet XmlSchemaMaxLengthFacet。我已经知道如何获取相关节点的限制列表,但我不知道如何找到导致异常的限制列表。 我怎么能这样做?
感谢您的帮助!
答案 0 :(得分:0)
我设法靠自己做。 我像这样检索XmlSchemaSimpleTypeRestriction:
XmlSchemaSimpleTypeRestriction restriction;
XmlSchemaSimpleType simpleType;
switch (reader.NodeType)
{
case XmlNodeType.EndElement:
if (reader.SchemaInfo.SchemaElement == null) return null;
simpleType = reader.SchemaInfo.SchemaElement.ElementSchemaType as XmlSchemaSimpleType;
if (simpleType == null) return null;
restriction = simpleType.Content as XmlSchemaSimpleTypeRestriction;
break;
case XmlNodeType.Attribute:
if (reader.SchemaInfo.SchemaAttribute == null)
return null;
restriction = reader.SchemaInfo.SchemaAttribute.AttributeSchemaType.Content as XmlSchemaSimpleTypeRestriction;
break;
default:
return null;
}
return restriction;
接下来,我解析它们的每个方面,并尝试这样做:
XmlSchemaMaxExclusiveFacet currentFacet = facet as XmlSchemaMaxExclusiveFacet;
if (Convert.ToDecimal(strXmlValue) >= Convert.ToDecimal(currentFacet.Value))
return "error";
如果它们都没有导致错误,我使用XmlSchemaExceptionErrorType来修改错误消息。