Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 计算给定字符串中的元素数_Xml_Xslt - Fatal编程技术网

Xml 计算给定字符串中的元素数

Xml 计算给定字符串中的元素数,xml,xslt,Xml,Xslt,我想数一数“;”在下面的字符串中,也拆分由“;”分隔的值个别地 输入字符串:-电话;紧急的;传真62TC;BS21;BS22;BS23;BS24;BS25;BS26计算字符串中某个字符出现次数的一种方法是删除所有其他字符,然后使用字符串长度。使用XPath 2.0,您可以简单地使用字符串长度(替换($str,[^;]+',''),但即使使用XPath 1.0,如果您使用translate两次,其中translate($str,';','')为您提供所有非分号的字符,然后translate($st

我想数一数“;”在下面的字符串中,也拆分由“;”分隔的值个别地


输入字符串:-电话;紧急的;传真62TC;BS21;BS22;BS23;BS24;BS25;BS26计算字符串中某个字符出现次数的一种方法是删除所有其他字符,然后使用字符串长度。使用XPath 2.0,您可以简单地使用
字符串长度(替换($str,[^;]+','')
,但即使使用XPath 1.0,如果您使用
translate
两次,其中
translate($str,';','')
为您提供所有非分号的字符,然后
translate($str,translate($str,,,''),''),'')
只提供分号字符串,您可以使用
字符串长度(translate($str,translate($str,“;”,”)
对字符进行计数。

echo“my;test;string;it;is”| sed's/[^;]//g'| wc-c
应该完成计数的技巧


echo”my;test;string;it;is“|tr”;“\n”
应该可以进行拆分(用您选择的拆分字符替换
\n

如果您只对计算字符串中某个字符的出现次数感兴趣,那么使用
字符串长度(
)就足够了

但是,由于您还希望拆分该字符串,因此需要使用
tokenize
函数。 它执行任务的第二部分-使用给定的标记拆分字符串,在本例中为
;'

“;”(任务的第一部分)的出现次数,您可以从 结果数组(
count
函数)中的元素数减去一

对于转换为正确XML示例的输入:

<root>
  <entry>TELEPHON;EMERGENC;FAX62TC;BS21;BS22;BS23;BS24;BS25;BS26</entry>
</root>

电话;紧急;传真62TC;BS21;BS22;BS23;BS24;BS25;BS26
运行以下XSLT以演示结果

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="/root/entry">
    <xsl:text>Entry: </xsl:text>
    <xsl:value-of select="."/>
    <xsl:text>&#xa;</xsl:text>

    <!-- Split the string -->
    <xsl:variable name="tbl" select="tokenize(., ';')"/>
    <!-- # of semicolons -->
    <xsl:variable name="cnt" select="count($tbl) - 1"/>
    <xsl:text># of ';': </xsl:text>
    <xsl:value-of select="$cnt"/>
    <xsl:text>&#xa;</xsl:text>

    <!-- Show each substring -->
    <xsl:for-each select="$tbl">
      <xsl:value-of select="position()"/>
      <xsl:text>. </xsl:text>
      <xsl:value-of select="."/>
      <xsl:text>&#xa;</xsl:text>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>

条目:

;
#关于“;”:

;
. 

;

您使用哪种语言?展示您的努力。它有8个“;”字符。拆分值似乎很简单,但找不到更清晰的方法来计算“;”计数和拆分是两件不同的事情。请显示您希望获得的确切输出,并说明是否使用XSLT 1.0或2.0。当一个或两个ple bash内置就足够了?@D.Kovács,海报将问题标记为xslt,因此XPath作为xslt中使用的表达式语言似乎是一个合适的工具。@MartinHonnen的确,我的错,现在是周五晚上。先生,非常好的正则表达式用于计算特定文本。加上一个。这个问题标记为
xslt
。您的an是什么语言swer?@michael.hor257k的确,我的错,现在是星期五晚上。我还是会留下它作为参考。如果社区需要,我会删除它。