如何在XSLT输入或XPath中标识行号?

如何在XSLT输入或XPath中标识行号?,xslt,xpath,Xslt,Xpath,我正在使用XSLT样式表处理XML文件,并希望在触发给定模板时报告输入行号。我可以使用DOM(例如Java中的XOM),它支持SAX解析器,因此可能可以使用定位器 或者,XSLT生成一个Xpath,该Xpath可以应用于原始文档,因此,至少对于人来说,可以指向特定的行 (实际应用程序是检测XML中的错误条件,使用XSLT进行搜索)Saxon对此有一个扩展。您可以在构建源树时设置一个选项来维护行号信息(例如命令行上的-l),如果设置了该选项,您可以使用扩展函数saxon:line-number()

我正在使用XSLT样式表处理XML文件,并希望在触发给定模板时报告输入行号。我可以使用DOM(例如Java中的XOM),它支持SAX解析器,因此可能可以使用定位器

或者,XSLT生成一个Xpath,该Xpath可以应用于原始文档,因此,至少对于人来说,可以指向特定的行


(实际应用程序是检测XML中的错误条件,使用XSLT进行搜索)

Saxon对此有一个扩展。您可以在构建源树时设置一个选项来维护行号信息(例如命令行上的-l),如果设置了该选项,您可以使用扩展函数saxon:line-number()来获取与树中元素节点关联的行号。

扩展函数和/或元素可能会被使用,“但这是一个远大的希望。”paulsm4感谢您的快速回复。创建hack并不是不可想象的——触发时模板知道其Xpath,DOM遍历知道每个节点的Xpath,SAX/DOM构建器知道行号。因此,一种方法是将行号/列号作为属性添加到DOM中。俗气,所以也许有更好的方法迪米特里的答案看起来很有趣。可能是一个起点?编辑:如果您想检测.xml文件中的错误条件,为什么不直接使用xsd?@G_H我是Saxon的伟大支持者,因此如果XSLT2.0是一种方法,我可以将其捆绑到发行版中。但我希望这个解决方案在“任何地方”都能奏效(我是一个乐观主义者)。@Mike非常感谢。这是否可以从Java中以编程方式调用?这个应用程序是完全独立的,我想我很乐意使用一个扩展函数,因为Saxon的NodeInfo接口有一个getLineNumber()方法,是的,它可以从Java中使用。当然,Saxon的NodeInfo主要不是为Java应用程序设计的(它是为XSLT和XPath引擎设计的)。