• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:XMLをJSPで再帰処理を使って処理する方法について)

XMLをJSPで再帰処理を使った取得方法とは?

このQ&Aのポイント
  • XMLの処理方法について教えてください。特に、JSPで再帰処理を使ってXMLのノードを取得する方法について知りたいです。
  • JSPで再帰処理を行ってXMLの要素ノードを取得する方法を教えてください。
  • XMLの再帰処理をJSPで行う際にエラーが発生しています。JSP内で要素ノードを取り出して表示する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> これで、ブラウザで確認するとテキストノードに[]がついて表示されて > しまいます。 それは、以下の行に原因があるのでしょう。 > if(nodeScan.hasChildNodes()) al.add(scanEach >         (nodeScan.getChildNodes())) ; scanEach() の返り値は ArrayList ですから、ArrayList に ArrayList を追加していることになります。 ArrayList#addAll() メソッドを使いましょう。 if(nodeScan.hasChildNodes()) {   al.addAll(scanEach(nodeScan.getChildNodes())); } # 確認してません (^^;

bibi5555
質問者

お礼

ほんっとに助かりました。 最後の再帰処理のところが問題だったんですね... 仕事でXMLの操作をしなきゃいけないのに、会社には詳しく教えてくれる 人がいないので、結構困り果ててます。 そんななかですごく助かりましたです。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

とりあえず、質問にあるのと同じ事をするなら、こんな感じでしょうか? > public boolean scanEach(NodeList agNode) { public boolean scanEach(NodeList agNode, javax.servlet.jsp.JspWriter out) { > if(node.hasChildNodes()) blScanEach(node.getChildNodes()) ; if(node.hasChildNodes()) blScanEach(node.getChildNodes(), out) ; とか。 私なら、要素をスキャンしてゆくことと、表示の都合("『" でくくるとか、改行するとか)は、 切り離しておいた方がよろしいので、私なら、ArrayList を渡して、Node を 突っ込んでおいて、JSP 側で利用するか、Iterator を作っちゃうかな。

bibi5555
質問者

補足

回答ありがとうございます!さっそく試してみました. JSPに書き出す処理は上手くいきました. でも、a-kumaさんが言うように表示などをメソッドで指定してしまうと いまいちと思うので、ArrayListの方も試してみました. public ArrayList scanEach(NodeList agNode) {    ArrayList al = new ArrayList() ;    try{   for(int nCnt=0;nCnt<agNode.getLength();nCnt++) { Node nodeScan = agNode.item(nCnt) ; if(nodeScan.getNodeType() == Node.ELEMENT_NODE){        al.add(nodeScan.getNodeName()) ; } if(nodeScan.getNodeType() == Node.TEXT_NODE) {       al.add(nodeScan.getNodeValue()) ; } } if(nodeScan.hasChildNodes()) al.add(scanEach          (nodeScan.getChildNodes())) ; }      }catch(Exception ex) { return al ;   } こんな感じでメソッドを作ってArrayListで受け取ってみました。 arrayList = scanEach(nodeList) ; Iterator itr = arrayList.iterator() ; while(itr.hasNext()) { obj = itr.next() ; out.println(obj +"<br>") ; } これで、ブラウザで確認するとテキストノードに[]がついて表示されて しまいます。 こんな感じです. aaa [すずらん, ddd, [ひまわり]] ccc [ゆうすけ] bbb [さ] このかっこは表示のときに取り除くことはできるのでしょうか また、子ノードの中に入ってる孫ノードが子ノードと一緒になってしまうのですが これをバラバラにすることはできるんでしょうか?? 教えて下さい、お願いします.

すると、全ての回答が全文表示されます。

関連するQ&A