Как проверить переключатели на основе возвращенных данных XML с использованием XSLT - PullRequest
0 голосов
/ 20 октября 2011

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

Я сделал небольшой тестовый код, чтобы попытаться заставить его работать, так как я не хотел рисковать, запутывая полную форму. Тест XML и XSL показаны ниже.

XML

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test2.xsl"?>
<root>
<radiobuttons>
    <radio1>Y</radio1>
    <blurb>blahblahblah</blurb>
</radiobuttons>
</root>

1008 * 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"/>
<xsl:template match="/">
<HTML>
<BODY>
<form>
<xsl:apply-templates select="root"/>
</form>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="root">

<input type="radio" name="radio1" value="Y" >
<xsl:if test="root/radiobuttons/radio1='Y'">
<xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
</input>Radio Button 1

<input type="radio" name="radio1" value="N" >
<xsl:if test="root/radiobuttons/radio1='N'">
<xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
</input>Radio Button 2

<br/>
<input name="blurb" type="text" id="blurb" value="{./radiotbuttons/blurb}"></input>
</xsl:template>
</xsl:stylesheet>

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

1 Ответ

1 голос
/ 20 октября 2011

вы допустили ошибку в вашем xpath

вы должны удалить root / из "root / radiobuttons / radio1", так как в этот момент вы находитесь внутри корневого узла, поэтому его больше не существует: P

<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"/>
<xsl:template match="/">
<HTML>
<BODY>
<form>
<xsl:apply-templates select="root"/>
</form>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="root">

<input type="radio" name="radio1" value="Y" >
<xsl:if test="radiobuttons/radio1='Y'">
<xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
</input>Radio Button 1

<input type="radio" name="radio1" value="N" >
<xsl:if test="radiobuttons/radio1='N'">
<xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
</input>Radio Button 2

<br/>
<input name="blurb" type="text" id="blurb" value="{./radiobuttons/blurb}"></input>
</xsl:template>
</xsl:stylesheet>
...