我有一个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>
答案 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/>