撒克逊人XPath错误-“无法序列化属性”

时间:2019-02-12 19:23:56

标签: saxon xpath-2.0

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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