我试图用一个元素(包含更多元素)替换单个字符。 使用XSL 2.0。
示例:
<element1>
<element2>some text and the char - I want to replace </element2>
...
</element1>
- (破折号)现在应该换成新元素:
<element1>
<element2>some text and the char <newElement/> I want to replace </element2>
...
</element1>
我已经尝试过了:
<xsl:template match="element1">
<xsl:analyze-string select="." regex="-">
<xsl:matching-substring>
<newElement/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
但是这删除了中间的所有其他元素(因为只有字符串是&#34;返回&#34;)。
使用 replace()功能,您只能插入字符串(不能&lt; )。
还有什么想法吗?
答案 0 :(得分:2)
您的模板与element()
匹配,但会替换text()
。如果您匹配text()
并在复制其余内容时替换text()
,则会按预期工作:
<!-- modified identity template matching no text() nodes -->
<xsl:template match="element() | comment() | processing-instruction()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:analyze-string select="." regex="-">
<xsl:matching-substring>
<newElement/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:copy-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
答案 1 :(得分:0)
需要进行两次更正:
element2
匹配,而不是element1
。element2
的标签(类似于
身份模板)。所以你的模板应该是这样的:
<xsl:template match="element2">
<element2>
<xsl:analyze-string select="." regex="-">
<xsl:matching-substring>
<newElement/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</element2>
</xsl:template>
当然,您的脚本还应包含身份模板。