使用XSLT检索XML文件名

问题描述 投票:2回答:4

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

xml xslt
4个回答
6
投票

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

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


2
投票

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

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

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


0
投票

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


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替换' ',并且可能只返回文件名部分而不是整个路径和文件名。

© www.soinside.com 2019 - 2024. All rights reserved.