XSLT可以使用返回的XML数据填充输入字段吗?

时间:2011-10-10 10:06:18

标签: xml xslt input populate

这可能是一个非常基本的问题,但我无法在这里或通过谷歌检查一小时后找到任何东西。我有一个表单上有一大堆输入和一个搜索自动完成,它将调用所选记录的xml数据。我打算使用XSLT转换此XML数据并为该客户端重现该表单的完整版本。我是XSLT的新手,所以到目前为止我一直在试验较小的例子,但是我不能,即使在这个较小的设置中,也不能得到生成的HTML,让它的输入由XML中的数据填充。

Xalan将生成HTML,所以我认为XML和XSLT至少都是vaild。两者的示例代码如下所示。我知道XSLT中存在冗余代码(在键盘上等)。它只是一个完整的形式,我希望一旦我可以解决这个例子,我希望能够工作。

XML

<?xml version="1.0"?>
<!-- clienttest.xml -->
<?xml-stylesheet type="text/xsl" href="XSLTtest.xsl"?>
<clientdetails>
    <clientcode>
        <CL.CREF>testsubjectcode</CL.CREF>
    </clientcode>
    <clientname>
        <CL.NAME>testsubjectname</CL.NAME>
    </clientname>
    <clientaccount>
        <CL.ACCT>testsubjectaccount</CL.ACCT>
    </clientaccount>
</clientdetails>

XSLT

<?xml version="1.0"?>
<!-- greeting.xsl -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html" indent="yes" omit-xml-declaration="no"
            encoding="UTF-8"
            doctype-public="-//W3C//DTD XHTML 1.1//EN"
            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>

    <xsl:template match="/">
        <html>
            <head>
                <title>XSLT Trials</title>
            </head>
            <body>
                    <xsl:apply-templates select="clientdetails"/>
            </body>
        </html> 
    </xsl:template>             

    <xsl:template match="clientdetails">
        <form>
            <label for="clientcode">Client code:</label>     
            <input class="medium" name="clientcode" method="post" onkeyup="changed2()" type="text" id="clientcode" placeholder="New client's code">
                <xsl:value-of select="./clientcode/CL.CREF"/>
            </input>
            <br></br>
            <label for="clientname">Client name:</label>
            <input class="medium" name="clientname" method="post" onkeyup="changed()" type="text" id="clientname" placeholder="New client's name"> 
                <xsl:value-of select="./clientname/CL.NAME"/>
            </input>
            <br></br>
            <label for="secondaccountcode">Second account code:</label>
            <input class="medium" id="secondaccountcode" name="secondaccountcode" type="text"> 
                <xsl:value-of select="./clientaccount/CL.ACCT"/>
            </input>
        </form>
    </xsl:template>
</xsl:stylesheet>

如果有人能给我一个很棒的牌。我觉得我很接近,但我不能让它表现得很好。感谢

1 个答案:

答案 0 :(得分:2)

如果我正确地解决了您的问题 - 您需要动态填充输入元素的属性。

对于属性值,您可以使用活动值模板 - xPath表达式受限于弯曲括号(“{”和“}”)。 因此,您的XSLT“clientdetails”模板将是(请参阅 value 属性):

<xsl:template match="clientdetails">
    <form>
        <label for="clientcode">Client code:</label>     
        <input class="medium" name="clientcode" method="post" onkeyup="changed2()" type="text" id="clientcode" placeholder="New client's code" value="{./clientcode/CL.CREF}">
        </input>
        <br></br>
        <label for="clientname">Client name:</label>
        <input class="medium" name="clientname" method="post" onkeyup="changed()" type="text" id="clientname" placeholder="New client's name" value="{./clientname/CL.NAME}"> 
        </input>
        <br></br>
        <label for="secondaccountcode">Second account code:</label>
        <input class="medium" id="secondaccountcode" name="secondaccountcode" type="text" value="{./clientaccount/CL.ACCT}"> 
        </input>
    </form>
</xsl:template>