我有这样一个XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="xFormSample01.xsl"?>
<xforms>
<model>
<instance>
<fname>
Rui
</fname>
<lname>
Chen
</lname>
</instance>
<submission id="form1" action="submit.asp" method="get"/>
</model>
<input ref="fname">
<label>First Name</label>
</input>
<input ref="lname">
<label>Last Name</label>
</input>
<submit submission="form1">
<label>Submit1</label>
</submit>
</xforms>
转换的XSL是这样写的:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My Test</h2>
<table border="0" width = "300">
<xsl:for-each select="xforms/input">
<tr>
<td width = "80" border = "1"><xsl:value-of select="label"/></td>
<td border = "1"><input type = "text" id = "{/xforms/input/label}"
value = ""/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
现在的问题是,我想把XML中 xforms/model/instance 下面的值填充到生成的Input里
面,就是说
<input type = "text" id = "{/xforms/input/label}" value = ""/>里面的value如
何设置,让我
能够在生成的页面的fname和lname两个input里面分别赋予初始值Rui和Chen。谢谢!
你好,
我们可以在<input>节点下增加一个<xsl:attribute>节点来从xml中取值赋给value属性。我对你的XSLT进行了一下修改,希望对你有帮助。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My Test</h2>
<table border="0" width = "300">
<xsl:for-each select="xforms/input">
<tr>
<td width = "80" border = "1"><xsl:value-of select="label"/></td>
<td border = "1"><input type = "text" id = "{/xforms/input/label}">
<xsl:variable name="x" select="@ref" />
<xsl:attribute name="value"><xsl:value-of select="//xforms/model/instance/*[name()=$x]" /></xsl:attribute>
</input>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
************************************************************************************************
如果我有这样的XML:
<MENUBAR>
<NAME>File</NAME>
<NAME>Open</NAME>
<NAME>Quit</NAME>
<MENUBAR>
可不可以通过XSLT转换为这样的脚本
var fileNewMenu = new Menu();
fileNewMenu.addMenu("File");
fileNewMenu.addMenu("Open");
fileNewMenu.addMenu("Quit");
就是针对每一个NAME都会对应一行fileNewMenu.addMenu的语句。
关于您提到的使用 XSLT 进行 xml 数据转换(生成 html/script)时,根据xml内容动态添加 script代码语句的问题,我们一般可以使用 for-each 语句来处理,就像一般的对于多结点产生重复输出情况一样, 比如我们有如下的 xml 文档:
<?xml version="1.0" encoding="utf-8"?>
<script>
<MENUBAR>
<NAME>File</NAME>
<NAME>Open</NAME>
<NAME>Edit</NAME>
<NAME>Quit</NAME>
</MENUBAR>
</script>
在 xslt 中,我们可以如下定义模板 :
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" />
<xsl:template match="/" >
<html>
<head>
<title>simple xslt example</title>
<script language="javascript">
function CreateMenu(txt)
{
var fileNewMenu = new Menu();
<xsl:for-each select="//NAME">
fileNewMenu.addMenu("<xsl:value-of select="text()" />");
</xsl:for-each>
}
</script>
</head>
<body>
。。。。。。。。。。。
当然,一般来说XSLT 主要还是针对 XML数据之间的转换而设计的,不太适合作为 XML-->代码之间的转换,可能针对更复杂的情况会有限制。 以上是我的一些建议,希望有所帮助。
*******************************************************************************************************
博客围绕XML与XSLT的数据转换展开。一是探讨如何将XML中特定值填充到生成的Input里,给出了修改后的XSLT代码;二是研究能否通过XSLT将特定XML转换为脚本,介绍了使用for - each语句处理的方法,还指出XSLT用于XML到代码转换可能存在限制。
1853

被折叠的 条评论
为什么被折叠?



