[英]Using xsl param (if exists) to replcae attribute value
我希望只有在傳遞了相關的param
名稱(它們是從調用Java程序傳遞的param
,xsl才能替換數據元素的value屬性。
輸入項
<applicationVariables applicationServer="tomcat">
<data name="HOST" value="localhost"/>
<data name="PORT" value="8080"/>
<data name="SIZE" value="1000"/>
</applicationVariables>
因此,例如,如果傳入參數HOST1 = myHost和PORT = 9080,則輸出應為:
<applicationVariables applicationServer="tomcat">
<data name="HOST" value="myHost"/>
<data name="PORT" value="9080"/>
<data name="SIZE" value="1000"/>
</applicationVariables>
請注意,替換了HOST和PORT但未替換SIZE的原因是,因為沒有名稱為SIZE的參數
我不希望對每個名稱進行硬編碼檢查,如下所示:
<xsl:when test="not($HOST)"> <!-- parameter has not been supplied -->
<xsl:attribute name="value"><xsl:value-of select="@value"/></xsl:attribute>
</xsl:when>
<xsl:otherwise> <!--parameter has been supplied -->
<xsl:attribute name="value"><xsl:value-of select="$HOST"/></xsl:attribute>
</xsl:otherwise>
我想要一種通用的說法:僅當存在具有相同名稱的參數時才替換value屬性。 但是,如何檢查名稱= @name的參數是否存在?
您可以將邏輯條件與xsl:if結合使用。
在這種情況下,最好將所有參數作為單個<xsl:param>
元素傳遞:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pParams">
<p name="HOST">myHost</p>
<p name="PORT">9080</p>
</xsl:param>
<xsl:variable name="vParams" select=
"document('')/*/xsl:param[@name='pParams']/*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@value">
<xsl:attribute name="value">
<xsl:value-of select=
"$vParams[@name=current()/../@name]
|
current()[not($vParams[@name=current()/../@name])]
"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
在提供的XML文檔上應用此轉換時:
<applicationVariables applicationServer="tomcat">
<data name="HOST" value="localhost"/>
<data name="PORT" value="8080"/>
<data name="SIZE" value="1000"/>
</applicationVariables>
產生想要的正確結果 :
<applicationVariables applicationServer="tomcat">
<data name="HOST" value="myHost"></data>
<data name="PORT" value="9080"></data>
<data name="SIZE" value="1000"></data>
</applicationVariables>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.