2011-10-20 10 views
0

私は、ユーザがアクセスできる特定のものを決定する.jspを持っています。これは、前のJSPによってストリームに読み込まれるXMLファイルを作成します。 char配列ストリームに読み込まれるXMLデータをテーブルに埋め込むにはどうすればよいですか?JSPから要求されたXMLデータをテーブルにフォーマットする方法

+0

何テーブルJSPに要求を転送する前に、リクエストスコープに? HTMLテーブル? – gigadot

+0

はい、htmlテーブルです。しかし、今はXMLが文字配列ストリームにあるため、XMLは平文であるため、... – cbj

答えて

3

XMLファイルからHTMLテーブルを取得する方法はたくさんあります。もっともきれいな方法の1つは、そのXMLを再利用可能なコレクションjavabeansにパースしてJSPに渡すので、HTMLテーブルをレンダリングするときにJSTL<c:forEach>を反復処理することができます。このように、各レイヤーはそれぞれ独自の明確な責任を持ちます。 Java SEはJAXBを提供してくれました。

あなたのXMLは次のように見えることを想像:

<data> 
    <entry> 
     <key>foo1</key> 
     <value>bar1</value> 
    </entry> 
    <entry> 
     <key>foo2</key> 
     <value>bar2</value> 
    </entry> 
    <entry> 
     <key>foo3</key> 
     <value>bar3</value> 
    </entry> 
</data> 

次のように、あなたはJAXBのJavaBeansを作成することができます。

@XmlRootElement 
public class Data { 

    @XmlElement(name="entry") 
    private List<Entry> entries; 

    public List<Entry> getEntries() { 
     return entries; 
    } 

    public static class Entry { 

     @XmlElement 
     private String key; 

     @XmlElement 
     private String value; 

     public String getKey() { 
      return key; 
     } 

     public String getValue() { 
      return value; 
     } 

    } 

} 

を次のように次にあなたがList<Entry>にそれを変換することができます:

List<Entry> entries = JAXBContext.newInstance(Data.class).createUnmarshaller().unmarshal(inputStream).getEntries(); 

次に、servlet(またはJSP?:/)に保存することができます

request.setAttribute("entries", entries); 
最後

あなたは、それ以上のJSPの反復でHTMLテーブルとしてそれを提示することができます:

<table> 
    <c:forEach items="${entries}" var="entry"> 
     <tr> 
      <td><c:out value="${entry.key}" /></td> 
      <td><c:out value="${entry.value}" /></td> 
     </tr> 
    </c:forEach> 
</table> 
+0

メソッドを使用してXMLファイルのストリームを作成すると、データはXMLではなくプレーンテキストとして表示されます。それはまったく重要ですか? – cbj

+0

はい、あなたのコードで何かが間違っています(または、あなたの質問が実際には不完全で、私が理解するのは、XML構造をHTMLテーブルとして提示したいということです)。 – BalusC

+0

私は他の質問であなたのメソッドを使って関数からXMLデータを得ました。 BufferedReaderを使用してそのデータを印刷しました。私はinputStreamのXMLはまだ触れていないと推測しています...?だから、この方法はまだ適用されますか? – cbj

2

XSLTを使用してそのままXMLのスタイルを設定するか、XPathを使用してXML上を移動し、必要に応じたテーブルを作成できます。

論理を埋め込むことがきれいであるかどうかはわかりませんが、私はむしろそれをBeanで処理し、jspがテーブルを生成するために使用できるBeanから最終的なリストを得ることができます。

http://oreilly.com/catalog/javaxslt/chapter/ch05.html

0

だからあなたのJSPであなたは、生のXML文書でのInputStream以外は何も持っていないしましたか? XML処理のためのJavaライブラリを習得するだけではほとんど選択肢がないようです。

Google検索「XML Processing in Java」には、利用可能なオプションが多数表示されます。上記の「HTMLのページで扱うことができるものにXMLを変換するXSLT」でさえ、このストリームを解析する必要があります。 JAXB API(http://jaxb.java.net/tutorial/section_1_2-Overview.html#Overview)は、これを少し難しくして、XML文書をPOJOにマップできるようにします。

とにかく、JSPレベルでこれを処理すると、コードの臭いが少しあります。 XMLストリームを別の場所で処理し、プレゼンテーションのためにJSPにPOJO結果を送信する必要があります。

私の価値は2セントです。

関連する問題