簡體   English   中英

使用xsl參數(如果存在)替換屬性值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM