我有一个xslt,我需要从磁盘读取一个文件。该文件是一个简单的文本文件,我想阅读完整的内容,并在我的输出html / pdf文件中内联它。这可能吗?
答案 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.

</drei>
<vier>Ich bin die zwei.

</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类库语言打开文件并返回字符串。