xsltコードを使用してテキストファイルの行数を読み取る方法を教えてもらえますか?
前もって感謝します。
このXPath1.0式を使用して、文字列の行数を計算します$pText
。
1 + string-length() - string-length(translate($pText, '
', ''))
このXPath式を使用する完全なXSLT1.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#プログラムでテキストファイルを読み取り、そのテキストをパラメーターとして変換に渡す必要があります。
II。XSLT2.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
これは、XSLT2.0プロセッサを使用して簡単に行うことができます。
paramとして指定された任意のテキストファイルでXSLファイルを試してください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>