我在XSLT中寻找一个XPath表达式,它将给出输入XML文件中匹配元素所在位置的行号和列号。也许看起来像这样:
<xsl:template match="//foo">
element foo is at line <xsl:value-of select="...?" /> column <xsl:value-of select="...?" /> of the input file
</xsl:template>
有没有办法用XSLT做到这一点?
答案 0 :(得分:2)
XSLT中不存在这样的功能,因为XSLT和XPath使用XDM实例来表示XML文档,这会丢失此信息,实体名称或DTD信息。
这是有道理的,因为从XPath的角度来看,XML不是文件,而是根,元素,属性,子等的树结构。
以下是一些“修复”此问题的建议,例如,如果您要报告XML文件中的错误
info:line
,info:column
@info:line
等获取此信息。xsl:try
和xsl:catch
,处理器可以发出有关上下文节点位置的信息,请检查处理器以获取信息。saxon:line-number
和saxon:column-number
与Saxon一起使用,但这显然取决于您加载文档的方式,无论此类信息是否可用。此外,这些功能仅适用于Saxon的商业版本,而不适用于开源“Home Edition”。由于属性没有命令,命名空间也没有,你不应该试图获取那些命令的物理位置。