2017-09-22 11 views
0

forループ内の条件によって別のタグ(アクティブ)値を出力したいのですが、このアプローチではできません。XSLTはfor-eachの外側にある別のタグにアクセスします

データ:

<ss> 
    <identifier> 
     <system> 
      <value value="10" /> 
     </system> 
     <system> 
      <value value="15"/> 
     </system> 
     <system> 
      <value value="789"/> 
     </system> 
    </identifier> 
    <active value="123" /> 
</ss> 

XSLT:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL /Transform"> 
    <xsl:output method="xml" indent="yes" /> 
    <xsl:template match="ss"> 
     <Patient 
      xmlns="http://hl7.org/fhir"> 
      <identifier> 
       <xsl:for-each select="identifier/system/value"> 
        <xsl:variable name="aa"> 
         <xsl:if test="@value='10'"> 
          <xsl:value-of select="active/@value" /> 
         </xsl:if> 
        </xsl:variable> 
        <gender value="{$aa}"/> 
       </xsl:for-each> 
      </identifier> 
     </Patient> 
    </xsl:template> 
</xsl:stylesheet> 

出力:私はあなたが欲しい構文コード

<?xml version="1.0"?> 
<Patient 
    xmlns="http://hl7.org/fhir"> 
    <identifier> 
     <gender value="123"/> 
     <gender value=""/> 
     <gender value=""/> 
    </identifier> 
</Patient> 

答えて

1

上から期待 出力にそれは相対的にします現在valueノードはこれです

<xsl:value-of select="../../../active/@value" /> 

また、あなたは、また絶対式

<xsl:value-of select="/ss/active/@value" /> 

を使うxsl:for-each外に格納する変数を使用することができます。例:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" /> 
<xsl:template match="ss"> 
    <xsl:variable name="active" select="active/@value" /> 
    <Patient xmlns="http://hl7.org/fhir"> 
    <identifier> 
     <xsl:for-each select="identifier/system/value"> 
     <xsl:variable name="aa"> 
      <xsl:if test="@value='10'"> 
      <xsl:value-of select="$active" /> 
      </xsl:if> 
     </xsl:variable>  
     <gender value="{$aa}"/>   
     </xsl:for-each>   
    </identifier> 
    </Patient> 
</xsl:template> 
</xsl:stylesheet> 
関連する問題