使用XSD模式进行XML验证-ValidationEventHandler信息

使用XSD模式进行XML验证-ValidationEventHandler信息,xml,validation,c#-4.0,xsd,schema,Xml,Validation,C# 4.0,Xsd,Schema,我有一个模式: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="address"> <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"/>

我有一个模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="address">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="street" type="xs:string"/>
                <xs:element name="city" type="xs:string"/>
                <xs:element name="country">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="5"/>
                            <xs:maxLength value="8"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

据我所知,大多数模式验证器几乎不允许定制错误报告。要生成为最终用户设计的错误消息,最好使用Schematron,这是它的主要设计目标之一

另一种方法是使用Saxon的模式验证器,该验证器能够生成XML验证报告,然后可以使用XSLT将其转换为最终用户术语。例如,验证报告应为:

<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
                   system-id="file:/Users/mike/Desktop/temp/test.xml">
   <error line="6"
          column="14"
          path="/Q{}address[1]/Q{}country[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "UK" of element &lt;country&gt; does not match the required simple type. Value "UK" contravenes the minLength facet "5" of the type of element country</error>
   <meta-data>
      <validator name="SAXON-EE" version="9.8.0.3"/>
      <results errors="1" warnings="0"/>
      <schema file="test.xsd" xsd-version="1.1"/>
      <run at="2017-08-10T18:36:16.694+01:00"/>
   </meta-data>
</validation-report>

元素国家的内容“UK”与所需的简单类型不匹配。值“UK”与元素国家类型的最小长度方面“5”相冲突
您可以尝试在这方面使用XSLT模式匹配,以使消息更为最终用户友好


(我最终的目的是在这个验证报告中添加更多的语义标记,使之更容易,例如编写
minLength
5
。但这仍然是一个愿望。)

我所知道的大多数模式验证器几乎不允许定制错误报告。要生成为最终用户设计的错误消息,最好使用Schematron,这是它的主要设计目标之一

另一种方法是使用Saxon的模式验证器,该验证器能够生成XML验证报告,然后可以使用XSLT将其转换为最终用户术语。例如,验证报告应为:

<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
                   system-id="file:/Users/mike/Desktop/temp/test.xml">
   <error line="6"
          column="14"
          path="/Q{}address[1]/Q{}country[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "UK" of element &lt;country&gt; does not match the required simple type. Value "UK" contravenes the minLength facet "5" of the type of element country</error>
   <meta-data>
      <validator name="SAXON-EE" version="9.8.0.3"/>
      <results errors="1" warnings="0"/>
      <schema file="test.xsd" xsd-version="1.1"/>
      <run at="2017-08-10T18:36:16.694+01:00"/>
   </meta-data>
</validation-report>

元素国家的内容“UK”与所需的简单类型不匹配。值“UK”与元素国家类型的最小长度方面“5”相冲突
您可以尝试在这方面使用XSLT模式匹配,以使消息更为最终用户友好


(我的意图最终是在该验证报告中添加更多语义标记,以使其更容易,例如编写
minLength
5
。但这仍然是一个愿望。)

因此,您需要进行验证,说明如果国家/地区小于最小值thrn,则应显示请输入长度大于5的字符串,但国家/地区只是一个示例。还有很多其他领域。我需要显示:“字段“country”的长度小于MinValue=5!请更正此项!”确切地告诉您想要实现什么?使用模式验证XML,如果存在验证错误,我希望在反馈中返回正确和清晰的信息。所以,当XML中有长度为4的国家时,我想显示客户机,长度必须大于4。您正在为此编写java代码吗?所以您需要进行验证,说明如果国家小于最小值thrn,则应显示请输入长度大于5的字符串。但国家是唯一的示例。还有很多其他领域。我需要显示:“字段“country”的长度小于MinValue=5!请更正此项!”确切地告诉您想要实现什么?使用模式验证XML,如果存在验证错误,我希望在反馈中返回正确和清晰的信息。所以,当XML中有长度为4的国家时,我想向客户展示,长度必须大于4。您正在为此编写java代码吗?谢谢您的回答。第一种方法需要准备xsd模式吗?我不能,因为我是从客户端得到的,我必须用这个模式检查转换后的数据。第二种方式,我需要付费才能获得带有模式验证的版本,是吗/是的,切换到Schematron是一个重大的变化,这就是为什么我建议第二个选择。至于第二种选择,我想你们不会免费为你们的客户提供服务,我也不会。谢谢你们的回答。第一种方法需要准备xsd模式吗?我不能,因为我是从客户端得到的,我必须用这个模式检查转换后的数据。第二种方式,我需要付费才能获得带有模式验证的版本,是吗/是的,切换到Schematron是一个重大的变化,这就是为什么我建议第二个选择。至于第二种选择,我假设你不会免费为你的客户提供服务,我也不会。
<?xml version="1.0" encoding="UTF-8"?>
<validation-report xmlns="http://saxon.sf.net/ns/validation"
                   system-id="file:/Users/mike/Desktop/temp/test.xml">
   <error line="6"
          column="14"
          path="/Q{}address[1]/Q{}country[1]"
          xsd-part="2"
          constraint="cvc-datatype-valid.1">The content "UK" of element &lt;country&gt; does not match the required simple type. Value "UK" contravenes the minLength facet "5" of the type of element country</error>
   <meta-data>
      <validator name="SAXON-EE" version="9.8.0.3"/>
      <results errors="1" warnings="0"/>
      <schema file="test.xsd" xsd-version="1.1"/>
      <run at="2017-08-10T18:36:16.694+01:00"/>
   </meta-data>
</validation-report>