Вернуть более одного элемента с XQuery: повторение вывода

У меня есть файл xsd. Для каждого элемента xs: внутри последовательности xs: я хочу преобразовать их в <Class></Class>, Таким образом, для этого файла ниже, вывод должен содержать 3 раза <Class></Class>,

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="contacts">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="contact"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="contact">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="firstname" type="xs:NCName"/>
        <xs:element name="lastname" type="xs:NCName"/>
      </xs:sequence>
      <xs:attribute name="citizen" type="xs:string"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Но вместо этого я получил это:

$ zorba -i -f -q test.xqy
<?xml version="1.0" encoding="UTF-8"?>
<Class/>
<Class/>

Этот вывод выглядит так странно. У меня нет <Class/> в файле xqy.

xqy файл:

for $x in doc("test.xsd")/xs:schema/xs:element/xs:complexType/xs:sequence
return <Class>
  </Class>

2 ответа

В XML <Class></Class> а также <Class/> являются эквивалентными узлами с простыми отличиями сериализации. Ваш процессор XQuery удаляет пробелы между <Class> а также </Class>, Вы можете попробовать установить параметры сериализации для процессора или добавить <Class xml:space="preserve">,

Вы можете улучшить часть XPath с /* потому что вы ищете детей xs:sequence:

XQuery 3.0

for $x in doc("test.xsd")/xs:schema/xs:element/xs:complexType/xs:sequence/*
return <Class></Class>

С этим у меня есть:

<?xml version="1.0" encoding="UTF-8"?>
<Class/>
<Class/>
<Class/>
Другие вопросы по тегам