Вернуть более одного элемента с 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/>