Я разрабатываю веб-приложение для Firefox, в котором есть кнопка, которая запускает XSLT-преобразование на стороне клиента DOM с таблицей стилей, полученной с помощью AJAX.Доступ к значению входного элемента с XPath в XSLT
Вот часть 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, свойство input
имеет значение value
.
Может ли кто-нибудь помочь?
EDIT: ясно, что XSLT применяется к текущему документу
Означает ли это, что вы добавляете значение формы вручную (потому что вход, который вы показываете, не имеет)? – Tomalak
это может показаться хакерским, но нет элемента формы. Я использую только элементы 'input' и' textarea' для того, что они делают, даже не отправляя форму. – asymmetric
Если вы попытаетесь получить значение атрибута «type», это сработает? (Я хочу исключить возможность того, что вы видите странность в пространстве имен, поскольку ваш XSLT не использует стандартное пространство имен html, тогда как ваш HTML-код, который не является действительным XHTML, может набирать где-то.) –