XSL:基于正则表达式将字符串拆分为标签

时间:2018-10-17 16:07:55

标签: regex xml xslt substring xslt-2.0

我在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()在分隔符之前抓取任何内容,但是我不知道如何递归使用它来在分隔符之前获取每个 实例;另一方面,由于我使用的是2.0版本,因此可以使用replace()来匹配所有实例,但是它不会接受尖括号,因此我不能仅仅告诉它将每个实例包装在{{1 }}标签。我在这里想念什么?

<topic>

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

谢谢!

1 个答案:

答案 0 :(得分:0)

您将在此处创建新节点,因此使用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>