2016-05-10 3 views
-1

の兄弟に属性を適用し、次のXSLTXSLTではなく、親

<div class="name-input"> 
    <xsl:attribute name="class">mandatory</xsl:attribute> 
    <xsl:copy-of select="FIRSTNAME/*/input"/> 
</div> 

は私が何をしたい、このマークアップに

<div class="pax-mandatory-field"> 
    <input type="text" id="FirstName" /> 
</div> 

を生成します考えてみなかったのどの(私が代わりにこれを試してみました

<div class="name-input"> 
    <input type="text" id="FirstName" class="mandatory" /> 
</div> 

です't仕事)

<div class="name-input"> 
    <xsl:copy-of select="FIRSTNAME/*/input"> 
     <xsl:attribute name="class">mandatory</xsl:attribute>  
    </xsl:copy-of> 
</div> 

どこから起動するかわかりません。何が変わる必要があるか?

+0

サンプル入力XMLを記載してください。 –

+0

@ JoelM.Lamsen生成されるXMLの長さは271KBです。しかし、私が提供した生成マークアップはXMLにあります – series0ne

答えて

3

あなたがこのの入力を持っていると仮定すると:

<FIRSTNAME> 
    <ANYNODE> 
     <input type="text" id="FirstName" /> 
    </ANYNODE> 
</FIRSTNAME> 

開始を最初に上記のサンプルXMLからのアイデンティティーテンプレート

<xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

で、input

<xsl:template match="FIRSTNAME/*/input"> 
    <!-- set container tags --> 
    <div class="name-input"> 
     <!-- xsl:copy here copies the current node --> 
     <xsl:copy> 
      <!-- applies the attributes if present --> 
      <xsl:apply-templates select="@*"/> 
      <!-- sets the class attribute --> 
      <xsl:attribute name="class">mandatory</xsl:attribute> 
     </xsl:copy> 
    </div> 
</xsl:template> 
のオーバーライドテンプレートを作成します

したがってXSL:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output omit-xml-declaration="yes"/> 

    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="FIRSTNAME/*/input"> 
     <div class="name-input"> 
      <xsl:copy> 
       <xsl:apply-templates select="@*"/> 
       <xsl:attribute name="class">mandatory</xsl:attribute> 
      </xsl:copy> 
     </div> 
    </xsl:template> 

</xsl:stylesheet> 

利回り:あなたは変更する必要がある場合

<FIRSTNAME> 
    <ANYNODE> 
     <div class="name-input"> 
      <input type="text" id="FirstName" class="mandatory"/> 
     </div> 
    </ANYNODE> 
</FIRSTNAME> 
+0

これはなぜ、どのように動作するのか説明できますか?私はコードダンプがその質問にどのように答えているかわかりません。 – nwellnhof

+0

@nwellnhof done。 –

0

は/あなたは、テンプレートを適用するために、フォームcopy-ofを切り替える必要があり、入力の属性を追加します。例:次のように:

他の入力要素の副作用を避けるためのモードを備えた「特別な」入力要素処理の新しいテンプレートを用意しました。

<xsl:template match="input" mode="myfirst"> 
    <xsl:copy> 
     <xsl:copy-of select="@*" /> 
     <xsl:attribute name="class">mandatory</xsl:attribute> 
     <xsl:apply-templates select="*" /> 
    </xsl:copy> 
</xsl:template> 

そして、それを使うより:

<div class="name-input"> 
    <xsl:apply-templates select="FIRSTNAME/*/input" mode="myfirst" /> 
</div> 
関連する問題