我在XSLT 2.0中工作,在将标签包装在字符串的一部分周围时遇到麻烦。这就是我所拥有的:
<dc:subject>Red
Green
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, '.*
','????')"/>
谢谢!
答案 0 :(得分:0)
您将在此处创建新节点,因此使用replace
并不是正确的方法,这纯粹是将字符串替换为其他字符串。
您可以在此处使用tokenize
拆分字符串,然后使用xsl:for-each
为每个部分创建新的topic
<subject>
<xsl:for-each select="tokenize(dc:subject, '
')">
<topic>
<xsl:value-of select="normalize-space(.)" />
</topic>
</xsl:for-each>
</subject>