BaseX属性无法序列化

时间:2014-07-09 20:40:05

标签: xml xpath xquery basex

我有这个简单的XML文件:

<catalog>
  <product dept="WMN">
    <number>557</number>
    <name language="en">Fleece Pullover</name>
    <colorChoices>navy black</colorChoices>
  </product>
  <product dept="ACC">
    <number>563</number>
    <name language="en">Floppy Sun Hat</name>
  </product>
  <product dept="ACC">
    <number>443</number>
    <name language="en">Deluxe Travel Bag</name>
  </product>
  <product dept="MEN">
    <number>784</number>
    <name language="en">Cotton Dress Shirt</name>
    <colorChoices>white gray</colorChoices>
    <desc>Our<i>favorite</i>shirt!</desc>
  </product>
</catalog>

我正在读一本名为XQuery by Priscila Walmsley的书,它说要输入命令:

doc("catalog.xml")/*/product/@dept

所以我输入BaseX

xquery doc("catalog.xml")/*/product/@dept

我收到此错误:

Error:
[SENR0001] Attributes cannot be serialized:attribute dept { "WMN" }.

尽管那本书说:

  

将返回输入文档中的四个dept属性。

我做错了什么?

2 个答案:

答案 0 :(得分:6)

BaseX只是对序列化严格要求。如果强制将属性节点强制为字符串,则不会抱怨:

xquery doc("catalog.xml")/*/product/@dept/string()

答案 1 :(得分:2)

XQuery 3.1 Serialization规范提供了新的&#34;自适应&#34;序列化模式,允许序列化属性和命名空间节点。从BaseX 8.0版开始,此模式用作新默认值。