我有这段代码:
<p>2 If the patient is unknown to the service a comprehensive assessment must be carried out prior to undertaking the procedure. (Reference <xref target="http://www.google.com" style="unformatted"/>)</p>
我希望这个xml是这样的:
<p><b>2</b>If the patient is unknown to the service a comprehensive assessment must be carried out prior to undertaking the procedure. (Reference <xref target="http://www.google.com" style="unformatted"/>)</p>
使用XSL 1.0 我已经尝试了很多方法来替换字符串,但节点(外部参照)已被删除!!
答案 0 :(得分:2)
如果您编写了一个带有match="p"
的模板,该模板会替换字符串,那么请将其更改为match="p/text()"
(或match="p//text()"
如果您需要在后代进行替换),然后确保你有适当的身份转换模板:
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
我不清楚你想要用b
元素替换或包裹哪个子字符串,上面提到的方法的示例是http://xsltransform.net/bnnZVC,它确实
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="wrap">
<xsl:param name="string" select="."/>
<xsl:param name="search"/>
<xsl:param name="wrap-name"/>
<xsl:choose>
<xsl:when test="not(contains($string, $search))">
<xsl:value-of select="$string"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring-before($string, $search)"/>
<xsl:element name="{$wrap-name}">
<xsl:value-of select="$search"/>
</xsl:element>
<xsl:call-template name="wrap">
<xsl:with-param name="string" select="substring-after($string, $search)"/>
<xsl:with-param name="search" select="$search"/>
<xsl:with-param name="wrap-name" select="$wrap-name"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="p/text()">
<xsl:call-template name="wrap">
<xsl:with-param name="search" select="'2 '"/>
<xsl:with-param name="wrap-name" select="'b'"/>
</xsl:call-template>
</xsl:template>
</xsl:transform>