使用XSLT检索XML文件名

时间:2012-04-02 07:51:39

标签: xml xslt

如何使用XSL 1.0代码检索XML源文件名?

4 个答案:

答案 0 :(得分:6)

在XSLT 2.0中,有两个相关的函数:base-uri()和document-uri()。

在XSLT 1.0中,您必须将URL或文件名作为参数传递给样式表,除非处理器为此提供扩展功能。

答案 1 :(得分:2)

使用Xalan,有以下非官方功能:

<xsl:value-of select="document-location()"/>

我在本地文件的转换中使用它,它给了我正在转换的XML文件的绝对路径。我找到了浏览Xalan代码的函数,它是类FuncDoclocation的一部分。

答案 2 :(得分:0)

无法获取XSL正在转换的文件的名称或路径。由于XSL的性质,被转换的数据可能不是来自文件,它可能只是转换数据流。

答案 3 :(得分:0)

我知道这很老了,但其他人可能仍会在寻找答案时遇到这个问题。

我知道在XSLT 1.0中执行此操作的唯一方法是在XSLT内部使用脚本函数:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="http://tempuri.org/msxsl">
<xsl:output method="xml" version="1.0"/>

<msxsl:script language="JScript" implements-prefix="user">
<![CDATA[
function getFilename(context){
  return context.nextNode.url;
}
]]>
</msxsl:script>

<xsl:template match="/">
  <INPUT>
  <filename><xsl:value-of select="user:getFilename(/)"/></filename>
  </INPUT>
</xsl:template>

</xsl:stylesheet>

这将生成XML输出,例如:

<?xml version="1.0" encoding="UTF-16"?>
<INPUT xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:user="http://tempuri.org/msxsl">
<filename>file:///C:/XLST/My%20Test%20XML%20File.txt.xml</filename>
</INPUT>

在这种情况下,我使用了一个名为C:/XLST/My Test XML File.txt的文件。

用于导入文本文件的vb.net代码首先将该文件转换为XML,并将.xml扩展名附加到源文件名,然后由Transform处理。

这就是为什么我的文件名以.txt.xml结尾的原因

然后可以根据需要使用普通的XLST字符串函数将%20替换为' ',并且也许只返回文件名部分,而不是整个路径和文件名。