撒克逊 XPath 错误 - "cannot serialize attribute"

标签 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 

开关。还有其他方法吗?

最佳答案

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

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

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

关于撒克逊 XPath 错误 - "cannot serialize attribute",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54657315/

相关文章:

java - Java Eclipse 中的 Serializer() 方法 "constructor serializer() is not defined"

xml - 如何在 xml 文件中搜索文本并使用 xslt 删除该行

java - 使用 XML 标记在 Saxonica 中检索 XPath 结果

XPath 2.0 : Retrieving nodes by attribute where value is case Insensitive

xml - 哪些浏览器支持 Xpath 2.0?

java - Java 中的 XSLT 编译错误

java - SaxonB 9.0 与 SaxonB 9.1.0.8 和 xs :boolean vs. xs:字符串类型错误

testing - XPath 2.0 在线测试器?

xslt - 命名空间的排序

xml - XPath:汇总问题时收集