Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

DOMでツリーの一部を抽出

はじめまして。

DOMを使ってXML文書をツリー構造にして、ツリーの一部を抽出して別のXML文書を生成したいのですがどうすればできますか?
XMLパーサはXerces2.7を使用しています。

例えば、下記のXML文書でbook要素とその子孫要素全てを抽出して、別のXML文書として保存といった具合です。

<?xml version="1.0"?>
<books>
     <book>
     <title>Nine Stories</title>
     <publish_year>1953</publish_year>
     <author country="Germany" sex="man">
        <name>J.D.Salinger</name>
     </author>
  </book>
</books>

よろしくお願いします。

2

回答

4223

閲覧

2件の回答

評価

0

ちょっとよく見えませんが、あるノードを取り出して、新しいドキュメントのルートへappendChild()すればできませんか?

評価

0

Xercesはわからないですがデフォルトのorg.w3c.domだと
importNodeでbook以下の要素を全部インポートできます。
そのあとでmioさんのおっしゃるようにrootにappendChildします。

こんな感じ
// 新しいドキュメント作成
Document newDoc = builder.newDocument();
// root作成
Element newRoot = newDoc.createElement("books");
newDoc.appendChild(newRoot);
// 元のドキュメントから<book>を取得
// NodeListで取らないと<book>が複数の場合困る
NodeList book = doc.getElementsByTagName("book");
// 新しいドキュメントのrootに<book>以下をインポートしてrootに追加
for(int i = 0;i<book.getLength();i++) {
     Node addNode = newDoc.importNode(book.item(i), true);
     newRoot.appendChild(addNode);
}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。