【问题标题】:Error when get attributes with xquery in basex 7.9在basex 7.9中使用xquery获取属性时出错
【发布时间】:2014-11-25 09:41:58
【问题描述】:

这是 XML 输入:

<bookstore>
  <book category="COOKING">
  <title lang="en">Everyday Italian</title>  
  <author>Giada De Laurentiis</author>
    <year>2005</year>
   <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore>

我正在使用 BaseX 7.9。当我请求属性时,

for $book in collection()/bookstore/book
return $book/@*

发生错误:

[SENR0001] Attributes cannot be serialized: attribute category {"COOKING"}.

如何解决这个问题?谢谢你帮助我!

【问题讨论】:

  • 好吧,老实说,我们不能告诉您比错误消息已经做的更多:属性不能被序列化。这就是您的查询正在执行的操作。如果要获取属性值,例如可以使用@*/data()。如果您需要更多帮助,则必须指定要返回的结果
  • 感谢 dirkk 我想准确地获取属性@category。它是 xsi:type 属性。我使用@*/string() 然后返回结果是“COOKING CHILDREN”,它是一个字符串。我不想要它
  • 给孩子做饭听起来很好吃,你为什么不想要呢?
  • 开个玩笑,你确实得到了属性类别的结果。它只是两个结果的串联(您遍历两本书并获取它们每一本书的属性)。那么,你想找回什么?预期的结果是什么?
  • 我使用 Basex 6.7.1 然后通过 @* 获取属性很好。为什么 basex 7.9 不工作。

标签: xpath xquery basex


【解决方案1】:

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

这在规范的早期版本中有所不同,它不允许单独输出属性(有关详细信息,请参阅错误代码 SENR0001)。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多