Xml XSLT访问目标元素源文件中的行和列位置
我在XSLT中寻找一个XPath表达式,它将为我提供输入XML文件中匹配元素所在位置的行号和列号。也许看起来像这样: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
元素foo位于输入文件的第行列
XSLT有什么方法可以做到这一点吗?XSLT中不存在这种功能,因为XSLT和XPath使用XDM实例来表示XML文档,而XML文档会丢失这些信息、实体名称或DTD信息 这是有意义的,因为从XPath的角度来看,XML不是文件,而是根、元素、属性、子级等的树结构 下面是一些“修复”此问题的建议,例如,如果您想报告XML文件中的错误
- 将绝对XPath作为字符串发送到任何上下文节点都很简单,在任何XPath测试仪中复制/粘贴它,它将直接指向您要报告的节点,而不管您是删除了空格还是保留了完整的行
- 您可以使用以下过程扩充文件:
- 用类似C#中的XmlReader的东西处理文件,它知道行,只需将行号放在每个元素的属性中,比如
,info:line
info:column
- 现在,当您处理这个扩展的XML文件时,您可以使用
等来获取这些信息@info:line
- 用类似C#中的XmlReader的东西处理文件,它知道行,只需将行号放在每个元素的属性中,比如
- 在XSLT 3.0中,使用
和xsl:try
,处理器可能会发出有关上下文节点位置的信息,请检查处理器以获取信息xsl:catch
- 如果您不介意使用特定于处理器的扩展,那么您可以将和与Saxon一起使用,但这显然取决于您如何加载文档,以及这些信息是否可用。此外,这些函数仅在Saxon的商业版本中有效,而不是在开源的“家庭版”中
由于属性没有顺序,名称空间也没有顺序,因此不应尝试获取这些属性的物理位置。不确定“列”和“行”是什么意思。你能给我们举一个输入和相应输出的例子吗?在“line”或“column”引用中显示得很短,因此这可能需要由正在使用的任何XML库提供的附加函数。谢谢,
saxon:line number
实际上就是我想要的!我不介意它是特定于萨克森的,因为这只是为了调试目的。