通过XSLT代码读取文本文件中的行数

时间:2012-04-24 09:03:22

标签: xslt c#-4.0

有人能告诉我如何使用xslt代码读取文本文件中的行数。

提前致谢。

2 个答案:

答案 0 :(得分:2)

使用此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, '&#xA;', ''))"/>
 </xsl:template>
</xsl:stylesheet>

对以下XML文档应用此转换时:

<text>aaaaa
bbbbb
ccccc</text>

产生了想要的正确结果:

3

请注意:您必须阅读C#程序中的文本文件,并将其文本作为参数传递给转换。


<强> II。 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, '&#xA;', ''))"/>
 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用),并且文件'c:/temp/delete/delete.txt'包含:

aaaaa
bbbbb
ccccc

产生了想要的正确结果

3

答案 1 :(得分:0)

您可以轻松使用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&#x20;</xsl:text><xsl:value-of select="$textFile"></xsl:value-of>
        <xsl:text>is&#x20;</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>