Saxon XPath错误 - “无法序列化属性”

问题描述 投票:0回答:1

当我运行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 

开关。还有另外一种方法吗?

saxon xpath-2.0
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.