在XSLT中使用XPath访问input元素的值

时间:2010-04-14 15:41:52

标签: xslt dom xhtml xpath input

我正在为Firefox开发一个Web应用程序,它有一个按钮,触发文档DOM的客户端XSLT转换,并通过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属性,即id为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>

我在当前 document上应用XSLT,如下所示:

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

不返回任何内容,而通过Firebug检查DOM会显示input元素的value属性确实有值。

有人可以帮忙吗?

编辑:明确表示XSLT已应用于当前文档

3 个答案:

答案 0 :(得分:1)

尝试使用斜杠或点点斜线来引用输入

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

答案 1 :(得分:1)

一个明显的问题:

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

这必须输出当前节点的@value子节点的input属性的值。

但是,在提供的XML文档中,与模板匹配的元素的input子元素没有@value属性:

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

input元素的唯一两个属性是typeid

解决方案:在输入元素中添加value属性,并且(如果XSLT代码中的其他所有内容都正常工作),则应输出此属性的值。

例如使用

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

答案 2 :(得分:1)

这是一个黑客攻击,但是我使用它并且它可以正常工作

添加

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

到每个输入元素。

你可以使用你想要的任何事件但是onBlur很好,因为它不会产生太多的客户端开销。