如何从磁盘读取txt文件并使用XSTL内联内容?

时间:2011-05-21 14:03:27

标签: xslt xslt-2.0

我有一个xslt,我需要从磁盘读取一个文件。该文件是一个简单的文本文件,我想阅读完整的内容,并在我的输出html / pdf文件中内联它。这可能吗?

3 个答案:

答案 0 :(得分:4)

以下是使用XSLT 2.0的unparsed-text()函数完成的方法:

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 :(得分:1)

请参阅this post from my blog,其中显示了解析大文本(日志)文件的示例,解决了the Wide-Finder problem

当然,使用标准的XSLT 2.0函数 unparsed-text() the XPath 2.0 functions for regular expressions

如果涉及更复杂的文本处理,可以使用XSLT 2.0指令进行常规表达式文本处理: <xsl:analyze-string> <xsl:matching-substring> <xsl:non-matching-substring> ,例如,我在 my JSON parser, written entirely in pure XSLT 2.0

答案 2 :(得分:-2)

单独的Xslt没有进行此类活动的机制。但是,可以编写脚本以在xsl中运行。在.NET中,这还包括扩展对象。您没有提到正在执行转换的语言/环境。

使用内联脚本/扩展对象,您可以使用IO类库语言打开文件并返回字符串。