0

我编写了一个 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 报告以下内容(这是我想要的): w3school 成绩

检票口给我留下了: 检票结果

检票口代码片段。“数据”来自 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 对象作为输入吗?还是我犯了另一个菜鸟错误?

谢谢你的帮助

4

1 回答 1

0

问题在于您的 XSL。查看 XsltTransformerBehavior 类的帮助页面:

http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/markup/transformer/XsltTransformerBehavior.html

它说:

容器标签将是用于转换的 xml 数据的根元素,以确保 xml 数据格式正确(单个根元素)。此外,属性 xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd 被添加到根元素以允许 XSL 处理器处理 wicket 名称空间。

在您的情况下,我不知道 ID last_cda 的容器标签是什么(您需要检查您的标记 HTML 文件)。假设它是一个div。所以你需要在你的 XSL 的 XPaths 中指定它,它应该看起来像这样:

<?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>
于 2013-08-20T15:06:11.117 回答