0

XSL を使用して基本的な XML を表示する Wicket アプリケーションを作成します。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 は次のように報告します (これが私の望みです)。 w3スクール結果

ウィケットは私にそれを残します: ウィケットの結果

Wicket コード スニペット。「データ」は 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 の 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>
于 2013-08-20T15:06:11.117 に答える