【问题标题】:Saxon XPath error - "cannot serialize attribute"Saxon XPath 错误 - “无法序列化属性”
【发布时间】:2019-02-12 19:23:56
【问题描述】:

当我运行 XQuery 命令行时,只要结果是一个元素,它就可以工作。

当我扩展该 XQuery 以仅获取属性值时,它失败并出现以下错误:

SENR0001: Cannot serialize a free-standing attribute node (net.sf.saxon.om.NameOfNode)

所以,这行得通

java -cp ...Saxon-HE-9.9.0-1.jar net.sf.saxon.Query 
   -s:AnyXMLFileAvailable.xml -qs:/

这失败了:

java -cp ...Saxon-HE-9.9.0-1.jar net.sf.saxon.Query 
   s:AnyXMLFileAvailable.xml -qs://@*

只要 XML 中的任何位置至少有一个属性,此命令就会失败并出现上述错误

我相信这可以通过许可的 Saxon 解决,它可以使用

 -outval:recover 

开关。还有其他方法吗?

【问题讨论】:

  • 我已经确定 XQuery 在不返回字符串(例如属性值)时可以工作。我会提供一个示例 XML 文件,但为什么要这样做 - 任何现有的 XML 文件就足够了。任何回答这个问题的人都会手头有 XML 文件
  • 您希望属性节点序列的序列化形式是什么?

标签: saxon xpath-2.0


【解决方案1】:

从命令行运行Query时默认的序列化方式是“xml”;出于兼容性原因,我一直不愿意更改它。当您尝试序列化某些结果(包括映射、数组和属性节点)时,“xml”序列化方法会失败。

如果您在命令行上设置!method=adaptive(如果使用 bash,则用“\”转义“!”)那么序列化永远不会失败,它将产生某种查询结果的表示。如果结果是一个属性,它将表示为name="value",这可能是也可能不是您想要的。如果您实际上只想要属性的字符串值,那么您需要在查询中提取它,例如通过使用string()data() 函数。

-outval 选项无关紧要,它与查询结果的模式验证有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多