使用XSLT检索XML文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用XSLT检索XML文件名相关的知识,希望对你有一定的参考价值。

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

答案

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

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

另一答案

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

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

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

另一答案

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

另一答案

我知道这已经过时了,但其他人可能仍在寻找答案。

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

以上是关于使用XSLT检索XML文件名的主要内容,如果未能解决你的问题,请参考以下文章

XSLT 无效令牌导致 XML 文档无效

XSLT:无法将操作数转换为“结果树片段”

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

需要示例代码片段帮助

防止 xslt 将 xml 转换为 html

使用 XSLT 格式化 XML 有序列表