我编写了一个Wicket应用程序,该应用程序应该使用XSL查看基本XML。当我让代码在w3schools教程中解析时,一切正常。当我使用Wickets XsltTransformerBehavior时,我只看到基本的表结构,但没有值。
XML:
<ecgreport timestamp="2000-01-01 00:00:00">
<patient>
<id>1</id>
<name>xyz</name>
<sex>male</sex>
<birthdate>1900-01-01 12:00:00</birthdate>
</patient>
</ecgreport>
XSL:
<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h3>CDA Report <xsl:value-of select="ecgreport/@timestamp"/></h3>
<table border="1">
<tr bgcolor="#9acdff">
<th>title</th>
<th><xsl:text>value</xsl:text></th>
</tr>
<tr>
<td>name</td>
<td><xsl:value-of select="ecgreport/patient/name"/></td>
</tr>
<tr>
<td>sex</td>
<td><xsl:value-of select="ecgreport/patient/id"/></td>
</tr>
<tr>
<td>birthdate</td>
<td><xsl:value-of select="ecgreport/patient/birthdate"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
W3School报告以下内容(这是我想要的):
Wicket离开了我:
Wicket代码段。 “data”来自ResultSet,System.out显示上面发布的xml:
XsltTransformerBehavior xslb = new XsltTransformerBehavior("ecg1.xsl");
xsl = new Label("last_cda",rs.getString("data"));
xsl.setEscapeModelStrings(false);
xsl.add(xslb);
add(xsl);
我尝试使用Chrome,Firefox,IE10 - 我猜他们现在都支持XSL。我想我在转换步骤中丢失了数据。我需要一个用于输入的DOM对象吗?或者我又犯了另一个菜鸟错误?
感谢您的帮助
答案 0 :(得分:0)
问题在于你的XSL。查看Class XsltTransformerBehavior的帮助页面:
它说:
containers标签将是应用于转换的xml数据的根元素,以确保xml数据格式正确(单根元素)。此外,属性xmlns:wicket =“http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd被添加到根元素,以允许XSL处理器处理wicket命名空间。” / p>
在您的情况下,我不知道ID last_cda的容器标签是什么(您需要检查标记HTML文件)。我们假设它是一个div。所以你需要在你的XSL的XPath中指定它,它应该是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h3>CDA Report <xsl:value-of select="div/ecgreport/@timestamp"/></h3>
<table border="1">
<tr bgcolor="#9acdff">
<th>title</th>
<th><xsl:text>value</xsl:text></th>
</tr>
<tr>
<td>name</td>
<td><xsl:value-of select="div/ecgreport/patient/name"/></td>
</tr>
<tr>
<td>sex</td>
<td><xsl:value-of select="div/ecgreport/patient/id"/></td>
</tr>
<tr>
<td>birthdate</td>
<td><xsl:value-of select="div/ecgreport/patient/birthdate"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>