Как прочитать текстовый файл с диска и встроить содержимое с помощью XSTL? - PullRequest
3 голосов
/ 21 мая 2011

У меня есть xslt, и мне нужно прочитать файл с диска.Этот файл представляет собой простой текстовый файл, который я хотел бы прочитать полностью и вставить его в свой выходной файл html / pdf.Возможно ли это?

Ответы [ 3 ]

4 голосов
/ 21 мая 2011

Вот как это можно сделать с помощью функции unparsed-text() XSLT 2.0:

D:\MiLu\Dev\XML :: more > eins.txt
Ich bin die eins.
^Z

D:\MiLu\Dev\XML :: more > zwei.txt
Ich bin die zwei.
^Z

D:\MiLu\Dev\XML :: saxon unparsed-text.xml unparsed-text.xsl
<?xml version="1.0" encoding="UTF-8"?>
<eins>
   <zwei> bla </zwei>
   <drei>Ich bin die eins.&#xD;
&#xD;
</drei>
   <vier>Ich bin die zwei.&#xD;
&#xD;
</vier>
</eins>

D:\MiLu\Dev\XML :: more /t1 unparsed-text.xml
<eins>
 <zwei> bla </zwei>
 <drei>
  <textfile href="eins.txt"/>
 </drei>
 <vier>
  <textfile href="zwei.txt"/>
 </vier>
</eins>

D:\MiLu\Dev\XML :: more /t1 unparsed-text.xsl
<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:strip-space elements="*"/>
 <xsl:output method="xml" indent="yes"/>

 <xsl:template match="textfile[ @href ]">
  <xsl:copy-of select="unparsed-text( @href )"/>
 </xsl:template>

 <xsl:template match="@* | node()">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
 </xsl:template>

</xsl:stylesheet>

Для XSLT 1.0 вам потребуется обходной путь, включающий файл-оболочку XML, ссылающийся на текстовый файл с использованием внешней сущности, и функцию document().

1 голос
/ 21 мая 2011

См. это сообщение из моего блога , показывающее пример того, как анализировать огромный текстовый файл (журнал), решая проблему широкоэкранного поиска .

Конечно, стандартная функция XSLT 2.0 unparsed-text() и используются функции XPath 2.0 для регулярных выражений .

Если требуется более сложная обработка текста, можно использовать инструкции XSLT 2.0 для обработки текста регулярных выражений: <xsl:analyze-string>, <xsl:matching-substring> и <xsl:non-matching-substring>, как, например, в мой анализатор JSON, полностью написанный на чистом XSLT 2.0 .

0 голосов
/ 21 мая 2011

Xslt один не имеет механизма для выполнения такой деятельности. Однако сценарии могут быть написаны для запуска внутри xsl. В .NET это также включает в себя объекты расширения. Вы не упоминаете, какой язык / среда выполняет преобразование.

С помощью встроенных сценариев / объектов расширения вы можете использовать библиотеку классов IO языков, чтобы открыть файл и вернуть строку.

...