Фактические теги элементов не фиксируются - PullRequest
0 голосов
/ 27 апреля 2010

Я использую приведенный ниже фрагмент кода 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 для передачи тегов table, tr и td?

1 Ответ

2 голосов
/ 27 апреля 2010

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

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

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

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

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

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

...