Получить имя файла XML с помощью XSLT - PullRequest
2 голосов
/ 02 апреля 2012

Как я могу получить имя исходного файла XML, используя код XSL 1.0?

Ответы [ 4 ]

6 голосов
/ 02 апреля 2012

В XSLT 2.0 есть две соответствующие функции: base-uri () и document-uri ().

В XSLT 1.0 необходимо передать URL или имя файла в качестве параметра в таблицу стилей, если процессор не предлагает функции расширения для этой цели.

2 голосов
/ 29 августа 2014

В Xalan есть следующая, неофициальная функция:

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

Я использую его для преобразования локального файла, и он дает мне абсолютный путь для преобразования XML-файла.Я обнаружил, что функция просмотра кода Xalan, она является частью класса FuncDoclocation.

0 голосов
/ 10 апреля 2019

Я знаю, что это старо, но другие люди все еще могут столкнуться с этим в поисках ответа.

Единственный способ, которым я знаю, чтобы сделать это в 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 на ' ' и, возможно, вернуть только часть имени файла, а не весь путь и имя файла.

0 голосов
/ 02 апреля 2012

Нет способа получить имя или путь к файлу, преобразуемому XSL. Из-за особенностей XSL преобразовываемые данные могут быть не из файла, а просто преобразовывать поток данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...