使用XQuery返回多个元素:输出重复

时间:2016-02-24 20:36:53

标签: xml xquery zorba

我有一个xsd文件。对于xs:sequence中的每个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/>

这个输出看起来很奇怪。我在xqy文件中没有<Class/>

xqy文件:

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

2 个答案:

答案 0 :(得分:0)

在XML中,<Class></Class><Class/>是仅具有序列化差异的等效节点。您的XQuery处理器正在删除<Class></Class>之间的空格。您可以尝试为处理器设置序列化选项,或添加<Class xml:space="preserve">

答案 1 :(得分:0)

您可以使用/*改进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/>