Доступ к значению элемента ввода с помощью XPath в XSLT - PullRequest
2 голосов
/ 14 апреля 2010

Я разрабатываю веб-приложение для Firefox, в котором есть кнопка, запускающая XSLT-преобразование DOM документа на стороне клиента, с таблицей стилей, получаемой через AJAX.

Вот часть XHTML, которая будет преобразована:

<html>
<head>
    <title>Static Javascript-based XMR Form Creator</title>
</head>
<body>
    <h1 id="title">Static Javascript-based XMR Form Creator</h1>

    <div class="opt_block" id="main_opts">
        Form name <input type="text" id="form_name" />
        Form cols <input type="text" id="form_cols" size="3" maxlength="3" />
    </div>
    <button id="generate">Generate source</button>
    <textarea rows="20" cols="50" id="xmr_source" ></textarea>
</body>

Внутри таблицы стилей я хочу получить доступ к атрибуту value первого поля ввода с идентификатором form_name.

XSLT выглядит так:

<xsl:template match="/html/body/div[@id = 'main_opts']" >
    <form>
        <xsl:attribute name="fname">
            <xsl:value-of select="input[@id = 'form_name']/@value" />
        </xsl:attribute>
    </form>
</xsl:template>

Я применяю XSLT к току document, вот так:

var processor = new XSLTProcessor();
processor.importStylesheet(data); // data received via AJAX request
// document is obviously the object representing the current DOM
var result = processor.transformToDocument(document);

Проблема в том, что XPath должен выполнять эту работу:

<xsl:value-of select="input[@id = 'form_name']/@value" />

ничего не возвращает, тогда как проверка DOM через Firebug показывает, что свойство value элемента input имеет значение.

Может кто-нибудь помочь?

РЕДАКТИРОВАТЬ: ясно, что XSLT применяется к текущему документу

Ответы [ 3 ]

1 голос
/ 14 апреля 2010

Одна очевидная проблема:

<xsl:value-of select="input[@id = 'form_name']/@value" />

Это должно вывести значение атрибута @value дочернего элемента input vurrent узла.

Однако в предоставленном XML-документе дочерний элемент input элемента, соответствующего шаблону, не имеет атрибута @value:

   Form name <input type="text" id="form_name" />  

У этого элемента input есть только два атрибута: type и id.

Решение : Добавьте атрибут value к элементу ввода и (если все остальное в коде XSLT работает нормально), значение этого атрибута должно быть выведено.

Например, используйте :

   Form name <input type="text" id="form_name" value="XXXXX" />  
1 голос
/ 22 августа 2011

Это хак, но я использую его, и он работает

Добавить

onBlur="this.setAttribute('value', this.value);"

к каждому элементу ввода.

Вы можете использовать любое событие, которое хотите, ноФункция onBlur хороша тем, что не создает слишком много накладных расходов на стороне клиента.

1 голос
/ 14 апреля 2010

попробуйте ссылаться на вход через косую черту или косую точку

<xsl:value-of select="/input[@id = 'form_name']/@value" />
<xsl:value-of select="../input[@id = 'form_name']/@value" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...