如何替換XML中的CData元素下的字符串? 在這裏,我想匹配2個條件如下圖所示:在XML中搜索字符串,其結尾與一個子字符串匹配幷包含另一個子字符串
<xsl:template match="@*[ends-with((local-name(),'mustEndWithThisSubstring'))] and not(contains((local-name(),'mustContainThisSubstring')))" >
1 - 如何有多個條件爲「XSL:匹配」部分?
2-如何用期望的字符串(已知)替換匹配的字符串(未知)?
查看下面的代碼片段。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" cdata-
section-elements=replacingWith"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@*[ends-with((local-name(),'mustEndWithThisSubstring'))] and not(contains((local-name(),'mustContainThisSubstring')))" >
<xsl:copy>
<replacingWith"/>
<xsl:value-of select="substring-after(., '<foundStringThatMatchesConditions>'), '</foundStringThatMatchesConditions>')"/>
</replacingWith>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
輸入:
<soap:Body>
<pre:getResponse>
<![CDATA[
<foundStringThatMatchesConditions>
.......
</foundStringThatMatchesConditions>
]]>
</pre:getResponse>
</soap:Body>
輸出:
<soap:Body>
<pre:getResponse>
<![CDATA[
<replacingWith>
.......
</replacingWith>
]]>
</pre:getResponse>
</soap:Body>
你應該知道[你的上一個問題](https://stackoverflow.com/questions/44532804/move-an-xml-element-from-its-place-to-under-another-parent-element-using -xslt)表示CDATA的內容只是一個無意義的字符串,XPath表達式除了字符串函數之外無法解決這個問題。即使目標是真正的XML樹,您的XPath表達式也不會有多大意義。 –