Xml XSLT访问目标元素源文件中的行和列位置

Xml XSLT访问目标元素源文件中的行和列位置,xml,xslt,xpath,xml-parsing,Xml,Xslt,Xpath,Xml Parsing,我在XSLT中寻找一个XPath表达式,它将为我提供输入XML文件中匹配元素所在位置的行号和列号。也许看起来像这样: 元素foo位于输入文件的第行列 XSLT有什么方法可以做到这一点吗?XSLT中不存在这种功能,因为XSLT和XPath使用XDM实例来表示XML文档,而XML文档会丢失这些信息、实体名称或DTD信息 这是有意义的,因为从XPath的角度来看,XML不是文件,而是根、元素、属性、子级等的树结构 下面是一些“修复”此问题的建议,例如,如果您想报告XML文件中的错误 将绝对XPa

我在XSLT中寻找一个XPath表达式,它将为我提供输入XML文件中匹配元素所在位置的行号和列号。也许看起来像这样:


元素foo位于输入文件的第行列

XSLT有什么方法可以做到这一点吗?

XSLT中不存在这种功能,因为XSLT和XPath使用XDM实例来表示XML文档,而XML文档会丢失这些信息、实体名称或DTD信息

这是有意义的,因为从XPath的角度来看,XML不是文件,而是根、元素、属性、子级等的树结构

下面是一些“修复”此问题的建议,例如,如果您想报告XML文件中的错误

  • 将绝对XPath作为字符串发送到任何上下文节点都很简单,在任何XPath测试仪中复制/粘贴它,它将直接指向您要报告的节点,而不管您是删除了空格还是保留了完整的行
  • 您可以使用以下过程扩充文件:
    • 用类似C#中的XmlReader的东西处理文件,它知道行,只需将行号放在每个元素的属性中,比如
      info:line
      info:column
    • 现在,当您处理这个扩展的XML文件时,您可以使用
      @info:line
      等来获取这些信息
  • 在XSLT 3.0中,使用
    xsl:try
    xsl:catch
    ,处理器可能会发出有关上下文节点位置的信息,请检查处理器以获取信息
  • 如果您不介意使用特定于处理器的扩展,那么您可以将和与Saxon一起使用,但这显然取决于您如何加载文档,以及这些信息是否可用。此外,这些函数仅在Saxon的商业版本中有效,而不是在开源的“家庭版”中

由于属性没有顺序,名称空间也没有顺序,因此不应尝试获取这些属性的物理位置。

不确定“列”和“行”是什么意思。你能给我们举一个输入和相应输出的例子吗?在“line”或“column”引用中显示得很短,因此这可能需要由正在使用的任何XML库提供的附加函数。谢谢,
saxon:line number
实际上就是我想要的!我不介意它是特定于萨克森的,因为这只是为了调试目的。