【问题标题】:org.xml.sax.SAXParseException when try to validate using standart validator and xsd?org.xml.sax.SAXParseException 尝试使用标准验证器和 xsd 进行验证?
【发布时间】:2019-07-17 05:54:14
【问题描述】:

有方法抛出 'org.xml.sax.SAXParseException' 异常。当尝试验证我的数据时。 因此,为了验证我的输入数据,我使用 javax.xml.validation 标准包。

我有 xsd 架构,预计有 2 个容器 - 用户和错误 用户可以包含元素列表,在每个子容器中,有Value和objectId(非强制)

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2018 sp1 (x64 by Organization-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://mynamespace" targetNamespace="http://mynamespace" elementFormDefault="qualified">
    <complexType name="User_Type">
        <sequence>
            <element name="objectId" minOccurs="0" maxOccurs="1">
                <annotation>
                    <documentation>(КМД)идентификатор риск-метрики, будет проигнорирован при операции добавления</documentation>
                </annotation>
                <simpleType>
                    <restriction base="string">
                        <maxLength value="36"/>
                    </restriction>
                </simpleType>
            </element>
            <element name="Value" minOccurs="1" maxOccurs="1">
                <simpleType>
                    <restriction base="string">
                        <maxLength value="1024"/>
                    </restriction>
                </simpleType>
            </element>
        </sequence>
    </complexType>
    <complexType name="Message_Type">
        <sequence>
            <element name="Text" minOccurs="0">
                <simpleType>
                    <restriction base="string">
                        <maxLength value="2048"/>
                    </restriction>
                </simpleType>
            </element>
        </sequence>
    </complexType>
    <element name="Users">
        <complexType>
            <sequence>
                <element name="User" type="tns:User_Type" minOccurs="0" maxOccurs="unbounded"/>
                <element name="Error" type="tns:Message_Type" minOccurs="0" maxOccurs="1"/>
            </sequence>
        </complexType>
    </element>
</schema>

我想验证这个输入代码 - 只有一个用户有字段。

String rm = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Users><User><Value>Value0</Value></User><Users>";

此代码 - 是一种方法。所以,rm - 是验证 xml validationFile 包含指向 xsd 的链接 而且,我刚刚阅读了这个文件并尝试验证字符串的输入流

String rm = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Users><User><Value>Value0</Value></User><Users>";
String xmlFile = rm
String validationFile = "xsd/headVersions/users_1.8.xsd";

InputStream stream = new ByteArrayInputStream(xmlFile.getBytes(StandardCharsets.UTF_8));
StreamSource source = new StreamSource(stream);

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(validationFile).getFile());

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory.newSchema(file).newValidator().validate(source);
return true;

我有解析异常,详细说明了,

cvc-elt.1:找不到元素“用户”的声明。

【问题讨论】:

    标签: java validation xsd


    【解决方案1】:

    在您的 .xsd 中,我可以看到您正在使用 XMLSpy。 为什么不使用它来根据方案验证您的 XML?

    您的 XML 无效,因为您缺少用户结束标记。 按照修正后的版本:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Users>
      <User>
        <Value>Value0</Value>
      </User>
    </Users>
    

    我建议在您的方案中修复您的命名空间问题,如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- edited with XMLSpy v2018 sp1 (x64 by Organization-->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xs:complexType name="User_Type">
            <xs:sequence>
                <xs:element name="objectId" minOccurs="0" maxOccurs="1">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="36"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="Value" minOccurs="1" maxOccurs="1">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="1024"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="Message_Type">
            <xs:sequence>
                <xs:element name="Text" minOccurs="0">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="2048"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
        <xs:element name="Users">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="User" type="User_Type" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="Error" type="Message_Type" minOccurs="0" maxOccurs="1"/>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    

    我删除了您的文档,因为它给出了奇怪的错误。 我使用了在线验证器:https://www.liquid-technologies.com/online-xsd-validator

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 2011-03-10
      • 2012-04-13
      • 1970-01-01
      • 2012-09-12
      • 2014-03-27
      • 2016-10-18
      • 1970-01-01
      相关资源
      最近更新 更多