2010-04-27 2 views
0

Я использую следующий фрагмент кода XSL для создания тега span, вызывающего функцию javascript при наведении указателя мыши. Вход в javascipt должен быть html-таблицей. Вывод переменной «showContent» дает только текстовое содержимое, но не вместе с тегами таблицы. Как это можно решить.Фактические теги элементов не получаются.

XSL:

  <xsl:variable name="aTable" as="element()*"> 
     <table border="0" cellspacing="0" cellpadding="0"> 
     <xsl:for-each select="$capturedTags"> 
     <tr><td><xsl:value-of select="node()" /></td></tr> 
     </xsl:for-each> 
     </table> 
     </xsl:variable> 
     <xsl:variable name="start" select='concat("Tip(&#39;", "")'></xsl:variable> 
     <xsl:variable name="end" select='concat("&#39;)", "")'></xsl:variable> 
     <xsl:variable name="showContent"> 
       <xsl:value-of select='concat($start,$aTable,$end)'/> 
     </xsl:variable> 
     <span xmlns="http://www.w3.org/1999/xhtml" onmouseout="{$hideContent}" 
       onmouseover="{$showContent}" id="{$textNodeId}"><xsl:value-of select="$textNode"></xsl:value-of></span> 

Фактический выход: <span onmouseout="UnTip()" onmouseover="Tip('content1')" id="d1t14"> это мой </span>

Ожидаемый результат:

<span onmouseout="UnTip()" onmouseover="Tip('<table><tr><td>content1</td></tr>')" id="d1t14">is my </span> 

Что такое изменение, которое должно сделать в приведенном выше XSL для таблицы, tr и td теги, чтобы пройти?

ответ

2

Функция concat() принимает строковые значения своих аргументов и объединяет их.

$aTable как определено, не имеет строкового значения.

Возможно, вы захотите определить его не как element()*, а как xs:string.

Тогда вам нужно будет избежать текста в нем или включить его в тег CDATA. Поскольку значение $aTable динамически генерируется, использование CDATA невозможно.

Вам понадобится ваша обработка XML-сериализации, чтобы развернуть разметку всех тегов в тексте. Даже в этом случае содержимое атрибута onmouseover будет содержать экранированные символы из-за нормализации значения атрибута.

Кажется совершенно невозможным.

Смежные вопросы