这是示例xml文档.
<root>
<node> count the number of words </node>
</root>
Run Code Online (Sandbox Code Playgroud)
对于这个例子,我想计算xslt中节点""中的单词数.
输出就像是单词数量:: 5
对此有何看法?
您的(Dimitre Novatchev)代码适用于上述xml.您的代码是否适用于以下xml?
<root>
<test>
<node> pass pass </node>
</test>
<test>
<node> fail pass fail </node>
</test>
<test>
<node> pass pass fail </node>
</test>
</root>
Run Code Online (Sandbox Code Playgroud)
输出如be:节点"node"中的单词总数:8
UPDATE3 ::
此代码完全适用于上述xml doc.假设
<root>
<test>
<node> pass pass </node>
<a> value </a>
<b> value </b>
</test>
<test>
<node> fail fail </node>
<b> value </b>
</test>
<test>
<node> pass pass</node>
<a> value </a>
</test>
</root>
Run Code Online (Sandbox Code Playgroud)
但是您的代码会计算整个文档中的单词数.我想只计算节点类型"node"中的单词数.输出就像
"node"中的单词数:: 6 Total Pass :: 4 Total Fail :: 2
Thanx Sathish
Dim*_*hev 11
使用这个XPath单线程:
string-length(normalize-space(node))
-
string-length(translate(normalize-space(node),' ','')) +1
Run Code Online (Sandbox Code Playgroud)
这是使用XSLT的简短验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:value-of select=
" string-length(normalize-space(node))
-
string-length(translate(normalize-space(node),' ','')) +1"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
在提供的XML文档上应用此转换时:
<root>
<node> count the number of words </node>
</root>
Run Code Online (Sandbox Code Playgroud)
产生了想要的正确结果:
5
Run Code Online (Sandbox Code Playgroud)
说明:标准的XPath功能的使用normalize-space(),translate()和string-length().
Update1:
OP问道:
"你的(Dimitre Novatchev)代码适用于上面的xml.你的代码是否适用于以下xml?"
Run Code Online (Sandbox Code Playgroud)<root> <test> <node> pass pass </node> </test> <test> <node> fail pass fail </node> </test> <test> <node> pass pass fail </node> </test> </root>
答:可以使用相同的方法:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:value-of select=
"string-length(normalize-space(.))
-
string-length(translate(normalize-space(.),' ','')) +1
"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当在新提供的XML文档(上面)上使用此转换时,会生成所需的正确答案:
8
Run Code Online (Sandbox Code Playgroud)
Update2:OP随后在评论中提出:
"我是否可以与节点中的单词进行比较,并使用一些默认单词.考虑节点包含值
"pass pass fail".我想计算通过次数和失败次数.Liekepass=2 fail=1.是否可能?帮助我男人"
答案:
同样的方法也适用于这个问题的修改(在一般情况下,你需要一个很好的标记化 - 请在新问题中询问我这个问题):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node">
pass: <xsl:value-of select=
"string-length()
-
string-length(translate(.,'p',''))
"/>
<xsl:text/> fail: <xsl:value-of select=
"string-length()
-
string-length(translate(.,'f',''))
"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当这个转换应用于最后一个XML文档(上面)时,生成了想要的正确的:
pass: 2 fail: 0
pass: 1 fail: 2
pass: 2 fail: 1
Run Code Online (Sandbox Code Playgroud)