2017-12-19 14 views
0

私はXSLTを持っています。特定のノードを除き、特定のノードの下にあるすべての要素をコピーしたいと考えました。私はこのノードを無視している理由は、ノードがxmlに存在するかどうかを確認する必要があるので、デフォルト値を設定する必要がある場合は&です。ここでは、コードsnipetteは、XSLTはすべてのノードに一致します&特定のノードを無視します

私はので、私は特にここ

<xsl:template match="*" mode="copyexcludingDL"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()[not(self::DriversLicense)]"/> 
    </xsl:copy> 
</xsl:template> 

はある特定のノードのためにこれを使用することができますモードを含まXSLT &に夫婦他のテンプレートを持って動作するようには思えない私は&を持っていますノード&ロジック

<xsl:for-each select="Vehicle"> 
    <xsl:apply-templates mode="copyexcludingDL" select="."> 
    <xsl:choose> 
     <xsl:when test="DriversLicense"> 
      <xsl:apply-templates mode="copy" select="DriversLicense" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:element name="DriversLicense"> 
       <xsl:text>None</xsl:text> 
      </xsl:element> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:apply-templates> 
</xsl:for-each> 
+0

質問にXMLを入力してください。 –

答えて

0

あなたがxsl:apply-templatesの子としてxsl:chooseを持つことはできませんので、それはおそらく、「動作しない」です。

あなたのロジックはあなたはそれが存在する場合DriversLicenseノードをコピーしたいが、それは、あなたが何DriversLicenseノードを持たないVehicleノードをテンプレートマッチングによって達成することができていない場合は、デフォルト値を追加することである場合。

<xsl:apply-templates select="Vehicle" /> 

はその後 DriversLicenseノードなし Vehicleノードに一致するテンプレートを追加し、そのコピーをノードと追加されます...、代わりに <xsl:for-each select="Vehicle">を行うので、これを行う代わりに、 xsl:apply-templatesとブロック全体を交換するにはこれはまた、あなたのXSLTで同様のアイデンティティテンプレートを使用していると仮定し、デフォルト

<xsl:template match="Vehicle[not(DriversLicense)]"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     <DriversLicense>None</DriversLicense> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 
関連する問題