2011-06-22 16 views
1

XSLでネストされた属性を構築する最良の方法は何ですか?XSLTで複数のネストされた属性を使用する

私の問題は、onmouseoverは属性であり、imgのsrcは属性であるということです。ビルダーによって与えられた電流の誤差がある:

An item of type 'Element' cannot be constructed within a node of type 'Attribute'.

私は好ましい経路であったであろう複数の属性の問題を持っていたが、エラーがスローされます。

Attribute and namespace nodes cannot be added to the parent element after a text, comment, pi, or sub-element node has already been added.

私は以来、次のことを試みてきました回避策として、運がない場合

<xsl:template name="Item3"> 
<xsl:param name="ItemID" /> 

<xsl:variable name="IMGSRC"> 
    <xsl:choose> 
    <xsl:when test="$ItemID = 'ST-18/NM/NM/36'"> 
     <xsl:value-of select="concat('imagesCategories/','ST-18-NM-NM-36','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/NM/NM/48'"> 
     <xsl:value-of select="concat('imagesCategories/','ST-18-NM-NM-48','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/NM/NM/72'"> 
     <xsl:value-of select="concat('imagesCategories/','ST-18-NM-NM-72','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/SMAM/SMAM/12'"> 
     <xsl:value-of select="concat('imagesCategories/','ST18-SMAM-SMAM-12','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/SMAM/SMAM/24'"> 
     <xsl:value-of select="concat('imagesCategories/','ST18-SMAM-SMAM-24','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/SMAM/SMAM/36'"> 
     <xsl:value-of select="concat('imagesCategories/','ST18-SMAM-SMAM-36','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/SMAM/SMAM/48'"> 
     <xsl:value-of select="concat('imagesCategories/','ST18-SMAM-SMAM-48','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/SMAM/SMAM/60'"> 
     <xsl:value-of select="concat('imagesCategories/','ST18-SMAM-SMAM-60','.jpg')"/> 
    </xsl:when> 
    <xsl:when test="$ItemID = 'ST-18/SMAM/SMAM/72'"> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select="concat('imagesCategories/',$ItemID,'.jpg')"/> 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
<xsl:choose> 
    <xsl:when test="Items/Item[@ItemID=$ItemID]"> 
    <xsl:attribute name="onmouseover"> 
     <xsl:text>ddrivetip('</xsl:text> 
     <img src="{$IMGSRC}"/> 

     <br /> 
     <b> 
     <xsl:value-of select="Items/Item[@ItemID=$ItemID]/@ItemID" /> 
     </b> 
     <br /> 
     <b> 
     <xsl:value-of select="Items/Item[@ItemID=$ItemID]/@ItemDescription" /> 
     </b> 
     <br /> 
     <br /> 
     <xsl:text>Price (01-09): </xsl:text> 
     <xsl:value-of select="Items/Item[@ItemID=$ItemID]/@PriceLevel1" /> 
     <br/> 
     <xsl:text>Price (10-24): </xsl:text> 
     <xsl:value-of select="Items/Item[@ItemID=$ItemID]/@PriceLevel2" /> 
     <br/> 
     <xsl:text>Price (25-49): </xsl:text> 
     <xsl:value-of select="Items/Item[@ItemID=$ItemID]/@PriceLevel3" /> 
     <br/> 
     <xsl:text>Qty In Stock: </xsl:text> 
     <xsl:value-of select="Items/Item[@ItemID=$ItemID]/@QtyOnHand" /> 
     <br /> 
     <br /> 
     <xsl:text>Click </xsl:text> 
     <b> 
     <xsl:text>"BUY!"</xsl:text> 
     </b> 
     <xsl:text> to add this item to your shopping cart</xsl:text> 
     <xsl:text>', '', '300')</xsl:text> 

    </xsl:attribute> 

追加のコードと適切な終了タグがあります。 ありがとうございました!

+0

ネストされました属性??? HTMLやXMLには存在しないので、XSLTでそれらを作成する必要があるのはなぜですか?作成したいHTMLまたはXMLのサンプルを表示したいかもしれません。おそらく、実行可能なものを作成したいと思うかもしれません。あなたの用語「ネストされた属性」だけが間違っています。 –

答えて

1

ddrivetip関数に文字列としてhtmlを渡そうとしているようです。しかし、これらをテキストの代わりにノードとして追加し、属性にノードを追加することはできません。そのため、ノードをテキストにすることです(大括弧と二重引用符もエスケープする必要があります)。

しかし、あなたはonmouseoverイベントに多くの情報を入れていますが、これはお勧めできません。あなたが現在やっていることの代わりに、あなたのHTMLの内容をあなたのitemIdに組み込んだ隠し要素を作成し、onmouseoverイベントで必要に応じて表示します。

0

使用CDATAセクションXSLTプロセッサは、テキストノードの一部としてではなく、属性に要素ノードを挿入しようとしてあなたのimgタグを解釈するように(それはXML仕様で禁止されている)

<xsl:attribute name="onmouseover"> 
    <xsl:text><![CDATA[ddrivetip('<img src="]]></xsl:text> 
    <xsl:value-of select="$IMGSRC" /> 
    <xsl:text><![CDATA["/> 

     <br /> 

    ...