- - PR -
XMLの子ども要素を丸ごとStringで取得する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-19 15:27
お世話になっております。
XMLファイルを読込む勉強中です。 行き詰ってしまったのでお知恵を拝借させてください。 下記のようなXMLが用意されています。 <ROOT> <B id="1">s1<C/>s2<C/></B> <B id="2"><C/>sss<C/>s<C/></B> </ROOT> 目的は<B/>の中に<C/>がいくつあるかを数える という物ですが、その際に<B>〜</B>の中身を デバッグ出力して答え合わせをしようと思いました。 コンソールへの予定出力イメージ id = 1 / c = 2 debug : s1<C/>s2<C/> id = 2 / c = 3 debug : <C/>sss<C/>s<C/> が、しかし、いろいろ試みて見たのですが XMLから<B>〜</B>の間にある文字列<C/><C/>を取得する方法を 見つけることが出来ません。 <B id="1">s1<C/>s2<C/></B>ではなく<B id="1">CC</B>ならば Node#getFirstChild()#getNodeValue()で取得可能なのですが ノードの値にタグが含まれると取得はできないようです。 (Node#getFirstChild()#getNodeValue()だとs1のみを取得する) 現在の環境はJDK1.4.2_8、XMLの解析にはDOMを用いています。 何かご存知のことがありましたらよろしくお願いします。 | ||||
|
投稿日時: 2007-07-19 16:36
Element.getTextContent()はTEXT_NODEとCDATA_SECTION_NODEの
文字列のみを返すようです。子要素も独立した要素として扱われるので、 TextContentには含まれなくとも(分類されなくても)自然でしょう。 また、ELEMENT_NODEは元々のXML上での表現では保持されないようです。 <C />のように、要素中に追加した空白はLSSerializer(JavaSE 5以降)で 出力しても復元できませんでした。 #もしかしたら細かいオプション指定で出来るかもしれません。 | ||||
|
投稿日時: 2007-07-19 18:07
XSLのjavax.xml.transform.Transformerを使えば、DOMノードをStringにすることができます。
| ||||
|
投稿日時: 2007-07-20 09:32
Transformはこういうときにも使えたんですね。
最終的に上記のようにして望む文字列に変換できました ありがとうございます |
1