Я знаю, что это старо, но другие люди все еще могут столкнуться с этим в поисках ответа.
Единственный способ, которым я знаю, чтобы сделать это в 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
к имени исходного файла, а затем обрабатывается преобразованием.
Именно поэтому мое имя файла заканчивается на .txt.xml
Затем можно использовать обычные строковые функции XLST, чтобы заменить %20
на ' '
и, возможно, вернуть только часть имени файла, а не весь путь и имя файла.