谁能告诉我如何使用 xslt 代码读取文本文件中的行数。
提前致谢。
使用这个 XPath 1.0 表达式来计算字符串中的行数$pText
:
1 + string-length() - string-length(translate($pText, '
', ''))
下面是使用此 XPath 表达式的完整 XSLT 1.0 转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pText" select="/*"/>
<xsl:template match="/*">
<xsl:value-of select=
"1 + string-length($pText) - string-length(translate($pText, '
', ''))"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于以下 XML 文档时:
<text>aaaaa
bbbbb
ccccc</text>
产生了想要的正确结果:
3
请注意:您必须阅读 C# 程序中的文本文件并将其文本作为参数传递给转换。
二、XSLT 2.0 解决方案
几乎相同,但在 XSLT 2.0 中可以使用其标准unparsed-text()
函数来读取文本文件:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:param name="pTextFileName" select="'file:///c:/temp/delete/delete.txt'"/>
<xsl:template match="/*">
<xsl:variable name="vText" select="unparsed-text($pTextFileName)"/>
"<xsl:value-of select="$vText"/>"
===================
<xsl:value-of select=
"1 + string-length($vText) - string-length(translate($vText, '
', ''))"/>
</xsl:template>
</xsl:stylesheet>
当应用于任何 XML 文档(未使用)时,如果文件 'c:/temp/delete/delete.txt' 包含:
aaaaa
bbbbb
ccccc
产生了想要的正确结果:
3
您可以轻松地使用 XSLT 2.0 处理器来做到这一点:
使用任何文本文件尝试 XSL 文件,以 param 形式给出textFile
。它会计算文件中的行数。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
exclude-result-prefixes="xs xd"
version="2.0">
<xsl:output method="text"/>
<xsl:param name="textFile">file:/c:/style.css</xsl:param>
<xsl:template match="/">
<xsl:text>Count of line in file </xsl:text><xsl:value-of select="$textFile"></xsl:value-of>
<xsl:text>is </xsl:text><xsl:value-of select="$CountOfLines"/>
</xsl:template>
<xsl:variable name="CountOfLines">
<xsl:value-of select="count(tokenize(unparsed-text(resolve-uri($textFile,base-uri())),'[\r\n]+'))"/>
</xsl:variable>
</xsl:stylesheet>