Проверка схемы XML в Java с префиксом - PullRequest
1 голос
/ 19 января 2012

у меня ниже xml сообщение

<web:Add xmlns:web="http://my/web/">
<web:a>1</web:a>
<web:b>2</web:b>
</web:Add>

Вот моя схема

<?xml version="1.0" encoding="utf-8"?>
<s:schema xmlns:s="http://www.w3.org/2001/XMLSchema" >
 <s:element name="Add">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="1" maxOccurs="1" name="a" type="s:int" />
        <s:element minOccurs="1" maxOccurs="1" name="b" type="s:int" />
      </s:sequence>
    </s:complexType>
  </s:element>
</s:schema>

Вот мой код

SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
File f = new File("C:\\temp\\my.xsd");
Schema schema = factory.newSchema(f);
Validator validator = schema.newValidator();
Document requestDoc = getDocumentFromString(request,true);
validator.validate(new DOMSource(requestDoc));

Почему это не с cvc-complex-type.2.4.a: Обнаружен недопустимый контент, начиная с элемента «web: a». Ожидается один из {{a} '.

если я изменю сообщение и приму префикс oul для таких элементов, как этот

<web:Add xmlns:web="http://my/web/">
<a>1</a>
<b>2</b>
</web:Add>

Тогда все работает. Зачем? оба сообщения являются действительными xml для предоставленной схемы. Любая помощь приветствуется

1 Ответ

2 голосов
/ 19 января 2012

Посмотрите на атрибуты targetNamespace и elementFormDefault элемента схемы.

...