方法抛出“ 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的输入流无效
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:找不到元素'Users'的声明。
答案 0 :(得分:0)
在您的.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