gpt4 book ai didi

java - 使用 XSD 架构解析 XML 文件时出现 SAXException

转载 作者:行者123 更新时间:2023-11-30 09:53:19 25 4
gpt4 key购买 nike

我有以下 XSD 文件:

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://www.wvf.com/schemas'
xmlns='http://www.wvf.com/schemas'
xmlns:acmewvf='http://www.wvf.com/schemas'>

<xs:element name='loft'>
</xs:element>
</xs:schema>

和以下 XML 文件:

<?xml version="1.0"?>

<acmewvf:loft xmlns:acmewvf="http://www.wvf.com/schemas"
xmlns="http://www.wvf.com/schemas">
</acmewvf:loft>

当我执行以下 Java 代码时:

public void parse(InputStream constraints) {
final SchemaFactory schemaFactory = new XMLSchemaFactory();
final URL resource =
ClassLoader.getSystemClassLoader().getResource(SCHEMA_PATH);
final DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
Document doc = null;
factory.setSchema(schemaFactory.newSchema(resource));
final DocumentBuilder builder = factory.newDocumentBuilder();
doc = builder.parse(constraints);

我得到以下 SAXException(在代码的最后一行):

cvc-elt.1: Cannot find the declaration of element 'acmewvf:loft'.

(请注意,SCHEMA_PATH 指向上面给出内容的 XSD 文件,constraints 是上面也给出内容的 XML 文件的输入流。)

这里出了什么问题?

最佳答案

参见 Using the Validating Parser .也许,您应该尝试添加以下内容以生成命名空间感知的验证解析器:

  factory.setNamespaceAware(true);
factory.setValidating(true);
try {
factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
}
catch (IllegalArgumentException x) {
// Happens if the parser does not support JAXP 1.2
...
}

不要忘记定义:

static final String JAXP_SCHEMA_LANGUAGE =
"http://java.sun.com/xml/jaxp/properties/schemaLanguage";

static final String W3C_XML_SCHEMA =
"http://www.w3.org/2001/XMLSchema";

关于java - 使用 XSD 架构解析 XML 文件时出现 SAXException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3874774/

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