Использование нескольких вложенных атрибутов в XSLT - PullRequest
1 голос
/ 22 июня 2011

Каков наилучший способ создания вложенных атрибутов в XSL?

Моя проблема в том, что onmouseover является атрибутом, а src из img является атрибутом.Текущая ошибка, заданная компоновщиком:

Элемент типа «Элемент» не может быть создан в узле типа «Атрибут».

Раньше у меня была проблема с несколькими атрибутами, которые были бы моим предпочтительным маршрутом, но выдает ошибку:

Узлы атрибута и пространства имен нельзя добавить к родительскому элементу после текста,узел комментария, пи или подэлемента уже был добавлен.

С тех пор я попытался в качестве обходного пути, но безуспешно

<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>

Естьнекоторый дополнительный код и затем правильные закрывающие теги.Спасибо всем!

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Похоже, вы пытаетесь передать html как строку в вашу функцию ddrivetip. Однако вы добавляете их как узлы вместо текста, и узлы не могут быть добавлены к атрибутам, поэтому одно из решений состоит в том, чтобы сделать узлы текстовыми (вам также придется избегать скобок и двойных кавычек).

Однако вы помещаете много информации в событие onmouseover, что не рекомендуется. Вместо того, что вы сейчас делаете, я бы создал скрытый элемент с идентификатором, который включает ваш itemId с содержимым вашего HTML, а затем показал бы это по мере необходимости в вашем событии onmouseover.

0 голосов
/ 22 июня 2011

Используйте разделы 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 />

  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...