gpt4 book ai didi

Java:SAX 模式验证

转载 作者:行者123 更新时间:2023-11-29 03:48:48 25 4
gpt4 key购买 nike

我遵循两个模式。 Master.xsd 和 Child.xsd

  1. Child.xsd 由Master.xsd 导入。
  2. 主文件具有目标命名空间“pub”。
  3. 子文件没有这样的命名空间。

当我尝试使用 Master.xsd 验证 xml 时,出现错误

org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'author' to a(n) 'element declaration' component.

我也试过在master.xsd中使用,这次我得到了类似的错误:

org.xml.sax.SAXParseException: src-resolve: Cannot resolve the name 'pub:author' to a(n) 'element declaration' component.

虽然这已被 XMLSpy 成功验证。

以下是架构、调用代码和验证代码:

大师.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:pub="http://schema.abc.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schema.abc.com">
<xs:import schemaLocation="Child.xsd"/>
<xs:element name="books">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="pub:book"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element ref="pub:published_date"/>
<xs:element ref="author"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="published_date" type="xs:dateTime"/>
</xs:schema>

child .xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="author">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="first_name"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="first_name" type="xsd:string"/>
</xsd:schema>

需要验证的Sample.xml:

<?xml version="1.0" encoding="UTF-8"?>
<pub:books xsi:schemaLocation="http://schema.abc.com" xmlns:pub="http://schema.abc.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<pub:book>
<pub:published_date>2001-12-17T09:30:47Z</pub:published_date>
<author>
<first_name>Adi</first_name>
</author>
</pub:book>
</pub:books>

验证Java代码:

private void validate(final String schema, final String xml) {
SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
InputStream is = getClass().getResourceAsStream(schema);
Schema schema;
try {
schema = schemaFactory.newSchema(new StreamSource(is));
Validator validator = schema.newValidator();
Source xmlSource = new StreamSource( new StringReader(xml));

validator.validate(xmlSource);

} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}

调用代码:

validate(masterXSDPath, "xmlString");

请告诉我哪里出错了??

最佳答案

我想您会希望两种模式都可用,因此类似于:

schemaFactory.newSchema(new Source[]{new StreamSource(is1), new StreamSource(is2)});

或者,您可以向 SchemaFactory 提供自定义 LSResourceResolver。

关于Java:SAX 模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9675347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com