【问题标题】:XSL: split string into tags based on regexXSL:基于正则表达式将字符串拆分为标签
【发布时间】:2018-10-17 16:07:55
【问题描述】:

我在 XSLT 2.0 中工作,并且无法将标签包裹在字符串的各个部分。这是我得到的:

<dc:subject>Red&#xD;
            Green&#xD;
            Blue
</dc:subject>

和期望的输出:

<subject>
  <topic>Red</topic>
  <topic>Green</topic>
  <topic>Blue</topic>
</subject>

我知道我可以使用substring-before() 在分隔符之前抓取任何东西,但我不知道如何递归地使用它来获取分隔符之前的 each 实例;另一方面,因为我在 2.0 中,所以我可以使用 replace() 来命中所有事件,但它不接受尖括号,所以我不能告诉它将每个事件都包含在 &lt;topic&gt; 标签中。我在这里错过了什么?

<xsl:value-of select="replace(dc:subject, '.*&#xD;','????')"/>

<xsl:value-of select="substring-before(dc:subject, '&#xD;')"/>

谢谢!

【问题讨论】:

    标签: regex xml xslt substring xslt-2.0


    【解决方案1】:

    您在这里创建新节点,因此使用 replace 纯粹是用其他字符串替换字符串不是正确的方法。

    您可以在此处使用tokenize 拆分字符串,然后使用xsl:for-each 为每个部分创建新的topic

    <subject>
      <xsl:for-each select="tokenize(dc:subject, '&#xD;')">
         <topic>
           <xsl:value-of select="normalize-space(.)" />
         </topic>
      </xsl:for-each>
    </subject>
    

    【讨论】:

    • 完美!我知道for-each 不能用于这样的字符串,但我没有想到tokenize。谢谢!如果我在实施此过程中发现更多问题,我会跟进。
    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多