Может ли XSLT заполнять поля ввода, используя возвращенные данные XML? - PullRequest
0 голосов
/ 10 октября 2011

это вполне может быть очень простой вопрос, но я не смог ничего найти здесь или после часа проверки через гугл. У меня есть форма с загрузкой входов и автозаполнением поиска, который будет вызывать данные XML для выбранной записи. Я намерен использовать XSLT для преобразования этих XML-данных и воспроизведения законченной версии формы для этого клиента. Я новичок в XSLT, поэтому я до сих пор экспериментировал с небольшими примерами, однако я не могу, даже в этой небольшой установке, заставить полученный HTML заполнить свои входные данные данными в XML.

Xalan создаст HTML, поэтому я думаю, что и XML, и XSLT, по крайней мере, бесполезны. Пример кода для обоих приведен ниже. Я знаю, что в 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>

1008 * 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 Ответ

2 голосов
/ 10 октября 2011

Если я правильно понимаю ваш вопрос - вам нужно динамически заполнить значение атрибут элемента input .

Для этого в качестве значения для ваших атрибутов вы можете использовать шаблоны активных значений - выражение 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>
...