0

Is there a way to emit the uri of the document currently being processed (which may or may not have been loaded with a document() function call) and preferably the line number?

Basically I have a situation in my XSL where there could potentially be an error so I am using

<xsl:message terminate="yes">...</xsl:message>

It would be nice if the message could include the location of the error in the source xml document.

Currently I am using the built-in .NET XSL engine, although I may have to switch to using saxon for another issue.

4

2 回答 2

0

XSLT 1.0 规范中没有什么非常有用的。

2.0 规范有 base-uri() 和 document-uri()。它们的含义略有不同:document-uri 是一个 URI,可用于使用 doc() 加载文档(由于 URIResolvers 和 EntityResolvers,这可能与文档的实际位置无关),而 base-uri( ) 适用于每个元素节点,并且是用于解析相对 URI 引用的 URI(由于 xml:base 属性和外部实体边界,可能与文档位置不同)。

Saxon 提供 saxon:system-id() ,它旨在作为加载特定元素的实际文件的 URI,以及 saxon:line-number() ,它是该源文件中该元素的行号。这取决于在构建文档时保留行号信息:命令行上的选项 -l。我认为 Microsoft 处理器中没有类似的东西。

于 2013-10-24T14:02:47.543 回答
0

借助 XSLT 2.0 处理器,您可以将base-uri(.)其用于 URI。Saxon 的行号有一个扩展名http://www.saxonica.com/documentation/index.html#!functions/saxon/line-number

对于 XSLT 1.0,我认为要访问输入 URI,您必须定义一个参数并从您的应用程序中传递值。

于 2013-10-24T11:36:53.773 回答