Почему XSD говорит, что мой элемент не завершен?

У меня есть XSD этой формы:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/example"
    xmlns:tns="http://www.example.org/example" elementFormDefault="qualified">

    <complexType name="bType">
    </complexType>

    <complexType name="aType">
        <choice maxOccurs="unbounded">
            <element name="a" type="tns:aType" />
            <element name="b" type="tns:bType" />
        </choice>
    </complexType>

    <element name="topelement">
        <complexType>
            <sequence>
                <element name="a" type="tns:aType" maxOccurs="1" />
            </sequence>
        </complexType>
    </element>
</schema>

И XML-файл, что я ожидаю соответствовать ему, например:

<?xml version="1.0" encoding="UTF-8"?>
<topelement xmlns="http://www.example.org/example"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/example example.xsd ">
  <a> <!-- Error on this line. -->
    <a/>
    <b/>
    <b/>
    <a/>
  </a>
</topelement>

К сожалению, XSD говорит, что это не допустимо со следующей ошибкой:

cvc-complex-type.2.4.b: The content of element 'a' is not complete. One of '{"http://www.example.org/example":a, "http://www.example.org/example":b}' is expected.  example.xml line 5

Насколько я могу сказать, я сделал все, что я должен сделать, чтобы тег был завершен. Я заполнил его неограниченным выбором и теги 'b'. Кто-либо может видеть то, что пошло не так, как надо?

Для разъяснения я хочу там быть только одним тег под topelement, и под этим, соединением и теги 'b'.

5
задан izb 6 February 2010 в 09:28
поделиться

3 ответа

Разобрались ... Ошибка вводит в заблуждение, потому что жалуется на неправильную букву «а».

Переименуйте верхний уровень 'a' в 'c', и он по-прежнему жалуется на 'a' в строке 5.

Исправление состоит в том, чтобы добавить minOccurs = 0 к элементу выбора, чтобы не все элементы 'a' нужны дети.

1
ответ дан 14 December 2019 в 01:07
поделиться

Ошибка находится на втором a не на первом втором a должен иметь выбор ниже.

3
ответ дан 14 December 2019 в 01:07
поделиться

Прежде чем отправить этот ответ, я не видел вашего собственного ответа... В любом случае, я не хочу, чтобы мои усилия/время потрачены впустую... Поэтому я не буду удалять это сообщение... Наряду с тем же ответом я также... написал несколько баллов, пожалуйста, пройдитесь...

ComplexType aType определяет, что он всегда имеет либо , либо в качестве дочерних элементов ... Это означает ... где бы ни появлялся элемент , он должен иметь дочерний элемент или ... что не является истиной ... согласно вашему входному XML.

Таким образом, это XSD код, который я написал, чтобы преодолеть ошибки (обратите внимание на атрибут "minOccurs" в коде ... потому что отсутствие которого вы получали ошибки ...)

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/example"
    xmlns:tns="http://www.example.org/example" elementFormDefault="qualified">
  <element name="topelement">
    <complexType>
      <sequence>
        <element name="a" type="tns:aType" minOccurs="0" maxOccurs="1" />
      </sequence>
    </complexType>
  </element>


  <complexType name="bType">
  </complexType>

  <complexType name="aType">
    <sequence>
      <choice maxOccurs="unbounded">
        <element name="a" type="tns:aType" minOccurs="0"/>
        <element name="b" type="tns:bType" minOccurs="0"/>
      </choice>
    </sequence>
  </complexType>
</schema>

Таким образом, согласно моему коду ... Тэг может иметь или не иметь никаких дочерних элементов.
Если вы не хотите изменять XSD файл ... то ваш XML должен иметь
тэг или тэг как дочерний от ... что-то вроде этого :

<topelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/example" xsi:schemaLocation="http://www.example.org/example example.xsd">
    <a>
    <a>
      <b/>
    </a>
    <b/>
    <b/>
    <a>
      <a>
       <b/>
      </a>
      <b/>
    </a>
</topelement>

Where as this is invalid:

<topelement xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/example" xsi:schemaLocation="http://www.example.org/example example.xsd">
    <a>
    <a>
      <b/>
    </a>
    <a/><!--this is wrong-->
    <b/>
    </a>
</topelement>


regards: Младенец-профессионал

5
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: