0

我有一个 xsd 文件。对于 xs:sequence 中的每个 xs:element,我想将它们转换为<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>
4

2 回答 2

0

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

于 2016-02-24T21:14:26.210 回答
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/>
于 2016-02-25T12:38:02.567 回答