XSLT:使用xsl:value-of-我是否返回字符串或单个字符串的节点集?

斯科特·贝克

我有一个模板,用于在给定的分隔符处分割字符串:

<xsl:template name="SplitStringAtSeparator">
  <xsl:param name="stringToSplit"/>
  <xsl:param name="separatorCharacter" />
  <xsl:choose>
     <xsl:when test="contains($stringToSplit, $separatorCharacter)">
        <xsl:value-of select="substring-before($stringToSplit, $separatorCharacter)"/>
        <xsl:call-template name="SplitStringAtSeparator">
           <xsl:with-param name="stringToSplit"
                           select="substring-after($stringToSplit, $separatorCharacter)"/>
        </xsl:call-template>
     </xsl:when>
     <xsl:otherwise>
        <xsl:if test="$stringToSplit != ''">
           <xsl:value-of select="$stringToSplit"/>
        </xsl:if>
     </xsl:otherwise>
  </xsl:choose>
</xsl:template>

假设stringToSplit='你好,这是一个要分割的字符串'并且我们要分割空格字符,我是否要找回一个只保留空格字符的文本节点

hellothisisastringtosplit

还是我将获得一个可以迭代的文本节点的节点集?

node[1] = hello
node[2] = this
node[3] = is
node[4] = a 
node[5] = string 
node[6] = to 
node[7] = split

我应该注意,如果不是后者,那么后者就是我要尝试做的事情

肖恩·杜金(Sean B.Durkin)

假设您的输入文件是...。

<root>
  <stringToSplit>hello this is a string to split</stringToSplit>
</root>

...,并且您想拆分字符串的内容stringToSplit并处理粒子。可以说该处理只是输出粒子的编号列表。这是您如何做的两个例子。一种解决方案是在XSLT 1.0中,另一种是在XSLT 2中。

XSLT 1.0解决方案

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:so="http://stackoverflow.com/questions/32363330"
  xmlns:exsl="http://exslt.org/common"
  version="1.0"
  exclude-result-prefixes="so exsl">

<xsl:output method="html" version="5" doctype-system="" encoding="utf-8" />
<xsl:strip-space elements="*" />  

<xsl:template match="/">
  <html>
    <head>
      <title>Hello! This is a string to split.</title>
    </head>
    <body>
      <h1>Hello! This is a string to split.</h1>
      <p>The following is an example of splitting a string in XSLT 1.0 and then processing each string part.</p>
      <h2>String parts</h2>
      <ol>
        <xsl:apply-templates select="root/stringToSplit" />
      </ol>
    </body>
  </html>
</xsl:template>

<xsl:template name="SplitStringAtSeparator">
  <xsl:param name="stringToSplit" />
  <xsl:param name="separatorCharacter" />
  <xsl:choose>
     <xsl:when test="contains($stringToSplit, $separatorCharacter)">
       <so:particle><xsl:value-of select="substring-before($stringToSplit, $separatorCharacter)"/></so:particle>
       <xsl:call-template name="SplitStringAtSeparator">
         <xsl:with-param name="stringToSplit" select="substring-after($stringToSplit, $separatorCharacter)" />
         <xsl:with-param name="separatorCharacter" select="$separatorCharacter" />
       </xsl:call-template>
     </xsl:when>
     <xsl:when test="$stringToSplit">
       <so:particle><xsl:value-of select="$stringToSplit"/></so:particle>
     </xsl:when>
  </xsl:choose>
</xsl:template>

<xsl:template match="stringToSplit">
  <xsl:variable name="split-string">
    <xsl:call-template name="SplitStringAtSeparator">
      <xsl:with-param name="stringToSplit" select="text()" />
      <xsl:with-param name="separatorCharacter" select="' '" />
    </xsl:call-template>
  </xsl:variable>
  <xsl:apply-templates select="exsl:node-set( $split-string)" mode="particle-processing" />
</xsl:template>

<xsl:template match="so:particle" mode="particle-processing">
  <li><xsl:value-of select="." /></li>
</xsl:template>

</xsl:stylesheet>   

XSLT 2解决方案

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

<xsl:output method="html" version="5" doctype-system="" encoding="utf-8" />
<xsl:strip-space elements="*" />  

<xsl:template match="/">
  <html>
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
      <title>Hello! This is a string to split.</title>
    </head>
    <body>
      <h1>Hello! This is a string to split.</h1>
      <p>The following is an example of splitting a string in XSLT 2 and then processing each string part.</p>
      <h2>String parts</h2>
      <ol>
        <xsl:analyze-string select="root/stringToSplit/text()" regex="\S*">
          <xsl:matching-substring>
            <li><xsl:value-of select="."/></li>
          </xsl:matching-substring>
        </xsl:analyze-string>
      </ol>
    </body>
  </html>
</xsl:template>

</xsl:stylesheet>  

输出

在这两种情况下,您都会得到输出文档,例如...

<html>
  <head>
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Hello! This is a string to split.</title>
  </head>
  <body>
    <h1>Hello! This is a string to split.</h1>
    <p>The following is an example of splitting a string in XSLT 1.0 and then processing each string part.</p>
    <h2>String parts</h2>
    <ol>
      <li>hello</li>
      <li>this</li>
      <li>is</li>
      <li>a</li>
      <li>string</li>
      <li>to</li>
      <li>split</li>
    </ol>
  </body>
</html>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用空字符串分割单个字符

来自分类Dev

使用字符串时,我应该对单个字符使用“ c”还是“ c”?

来自分类Dev

为什么我无法使用索引访问字符串单个字符

来自分类Dev

使用Flutter sqflite返回单个字符串

来自分类Dev

使用StringBuilder将字符串的ArrayList连接成单个字符串

来自分类Dev

如何使用递归来混合2个字符串并以1个“隔行”字符串返回两个字符串?

来自分类Dev

XSLT在每个字符上分割字符串

来自分类Dev

如何使用printf从字符串数组中打印单个字符?

来自分类Dev

使用.split将单个字符与字符串分开

来自分类Dev

仅使用bash将单个字符串拆分为字符数组

来自分类Dev

使用单个字符串旋转并替换 XDocument 的字符嵌套元素数组

来自分类Dev

使用单个字符将字符串转换为数组列表 Java

来自分类Dev

使用 JAVA 用其他字符串替换单个字符串中的 2 个部分

来自分类Dev

嵌套的Select语句-使用两个字符串值之间的字符串获取数据集

来自分类Dev

xsl中包含多个字符串

来自分类Dev

使用Function反转字符串,然后将整个字符串返回给main函数

来自分类Dev

使用PHP从另一个字符串返回预选单词的字符串

来自分类Dev

使用 Javascript 搜索字符串并返回下一个字符串

来自分类Dev

超过8个字符的字符串是否必须使用“:”?

来自分类Dev

如何使用swift检查字符串是否仅包含1个字符

来自分类Dev

C#-如何使用Linq和Regex从单个字符串实现多个匹配?

来自分类Dev

使用LXML从文件中打印出单个字符串

来自分类Dev

使用分隔符将List <List <String >>连接为单个字符串

来自分类Dev

JS使用单个字符串作为多维数组的键

来自分类Dev

如何使用NLTK计算单个字符串的句子数

来自分类Dev

如何使用单个正则表达式模式定位多个字符串

来自分类Dev

使用JMeter提取整个(单个字符串)响应

来自分类Dev

使用批处理从单个字符串中获取两个参数?

来自分类Dev

使用 R 附加数据以形成单个字符串

Related 相关文章

  1. 1

    使用空字符串分割单个字符

  2. 2

    使用字符串时,我应该对单个字符使用“ c”还是“ c”?

  3. 3

    为什么我无法使用索引访问字符串单个字符

  4. 4

    使用Flutter sqflite返回单个字符串

  5. 5

    使用StringBuilder将字符串的ArrayList连接成单个字符串

  6. 6

    如何使用递归来混合2个字符串并以1个“隔行”字符串返回两个字符串?

  7. 7

    XSLT在每个字符上分割字符串

  8. 8

    如何使用printf从字符串数组中打印单个字符?

  9. 9

    使用.split将单个字符与字符串分开

  10. 10

    仅使用bash将单个字符串拆分为字符数组

  11. 11

    使用单个字符串旋转并替换 XDocument 的字符嵌套元素数组

  12. 12

    使用单个字符将字符串转换为数组列表 Java

  13. 13

    使用 JAVA 用其他字符串替换单个字符串中的 2 个部分

  14. 14

    嵌套的Select语句-使用两个字符串值之间的字符串获取数据集

  15. 15

    xsl中包含多个字符串

  16. 16

    使用Function反转字符串,然后将整个字符串返回给main函数

  17. 17

    使用PHP从另一个字符串返回预选单词的字符串

  18. 18

    使用 Javascript 搜索字符串并返回下一个字符串

  19. 19

    超过8个字符的字符串是否必须使用“:”?

  20. 20

    如何使用swift检查字符串是否仅包含1个字符

  21. 21

    C#-如何使用Linq和Regex从单个字符串实现多个匹配?

  22. 22

    使用LXML从文件中打印出单个字符串

  23. 23

    使用分隔符将List <List <String >>连接为单个字符串

  24. 24

    JS使用单个字符串作为多维数组的键

  25. 25

    如何使用NLTK计算单个字符串的句子数

  26. 26

    如何使用单个正则表达式模式定位多个字符串

  27. 27

    使用JMeter提取整个(单个字符串)响应

  28. 28

    使用批处理从单个字符串中获取两个参数?

  29. 29

    使用 R 附加数据以形成单个字符串

热门标签

归档