2011-05-21 72 views
3

我有一个xslt,我需要从磁盘读取文件。该文件是一个简单的文本文件,我希望阅读完整的内容并将其内嵌在我的输出html/pdf文件中。这可能吗?如何从磁盘读取txt文件并使用XSTL内联内容?

+0

这只是一个文件的阅读,我不知道它是否可以完成。 – 2011-05-21 14:04:12

+0

好问题,+1。查看我的答案,以获取可能在使用XSLT进行文本处理时发现有用的函数的链接。还有一些非平凡例子的链接,我如何在严肃的解决方案中使用这些函数,比如我的JSON解析器和Tim Brey的Wide-Finder问题的解决方案。 – 2011-05-21 16:40:13

回答

3

下面是它如何做,使用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()函数。

+0

谢谢,不知道这个。正是我在找什么。 – 2011-05-21 14:57:06

-2

Xslt本身没有做这种活动的机会。不过脚本可以写成在xsl里运行。在.NET中,这还包括扩展对象。您没有提及执行转换的语言/环境。

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

+0

我正在使用Java。 – 2011-05-21 14:25:48

+0

它会出现java有类似的能力? http://www.cafeconleche.org/books/xmljava/chapters/ch17s03.html – Cargowire 2011-05-21 14:48:29

+0

http://www.xsltfunctions.com/xsl/fn_unparsed-text.html – 2011-05-21 14:56:40

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做。