SAXException при разборе XML-файла со схемой XSD - PullRequest
2 голосов
/ 06 октября 2010

У меня есть следующий 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: не удается найти объявление элемента 'acmewvf: loft'.

(Обратите внимание, что SCHEMA_PATH указывает на файл XSD, содержимое которого указано выше, а ограничения являются входным потоком для файла XML, содержимое которого также указано выше.)

Что здесь не так?

1 Ответ

2 голосов
/ 06 октября 2010

См. Использование проверяющего анализатора . Возможно, вам следует попытаться добавить следующее для создания проверяющего синтаксического анализатора с учетом пространства имен:

  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"; 
...