如何从磁盘读取txt文件并使用XSTL内联内容?
我有一个xslt,我需要从磁盘读取文件。该文件是一个简单的文本文件,我希望阅读完整的内容并将其内嵌在我的输出html/pdf文件中。这可能吗?如何从磁盘读取txt文件并使用XSTL内联内容?
下面是它如何做,使用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()
函数。
谢谢,不知道这个。正是我在找什么。 – 2011-05-21 14:57:06
Xslt本身没有做这种活动的机会。不过脚本可以写成在xsl里运行。在.NET中,这还包括扩展对象。您没有提及执行转换的语言/环境。
使用内联脚本/扩展对象,可以使用语言IO类库打开文件并返回字符串。
我正在使用Java。 – 2011-05-21 14:25:48
它会出现java有类似的能力? http://www.cafeconleche.org/books/xmljava/chapters/ch17s03.html – Cargowire 2011-05-21 14:48:29
http://www.xsltfunctions.com/xsl/fn_unparsed-text.html – 2011-05-21 14:56:40
查看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做。
这只是一个文件的阅读,我不知道它是否可以完成。 – 2011-05-21 14:04:12
好问题,+1。查看我的答案,以获取可能在使用XSLT进行文本处理时发现有用的函数的链接。还有一些非平凡例子的链接,我如何在严肃的解决方案中使用这些函数,比如我的JSON解析器和Tim Brey的Wide-Finder问题的解决方案。 – 2011-05-21 16:40:13