1

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

提前致谢。

4

2 回答 2

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# 程序中的文本文件并将其文本作为参数传递给转换。


二、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
于 2012-04-24T16:10:45.890 回答
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>
于 2012-04-24T09:34:49.577 回答