• ベストアンサー

JavaでXMLのNodeツリーをファイル出力したいのですが

こんにちは、domagooです。 Javaで、XMLのNodeツリーの内容をファイル出力したいと思っています。 MSXMLですと、IXMLDOMDocumentオブジェクトに対して、 pXmlTree -> save("ファイルパス"); で、ツリーの内容を一度にファイルに保存することができますが、Javaにもそのようなツリーの内容を一度に保存する方法はありますでしょうか。 もし一度に保存する方法がなければ、どのような方法で保存するのが一般的であるか、ご教示ください。

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

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.1

この話は、JAVAのバージョンによってやり方が変わってきます。 たしか、JAVA1.3ではXMLが正式サポートされていなかったはずで、ファイルへの保存はパーサーの実装に依存していました。 JAVA1.4ではXMLが正式サポートされましたが、DOMの仕様にファイルの入出力がサポートされていなかったため、JAVA側で機能を実現しました。 JAVA5.0ではDOMのLEVEL3に対応したため、DOMのAPIでできると聞いています。 今回はJAVA1.4での方法を記述しておきます。 import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; TransformerFactory tff=TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(); tf.setOutputProperty("encoding", "Shift_JIS"); tf.transform( new DOMSource(document),  new StreamResult( new File(filename) ) );

domagoo
質問者

お礼

ありがとうございます! 教えていただいた内容で、出力ができました。 お世話になりました。

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

関連するQ&A

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing

  • XMLのNodeからXPathを生成(逆引き?)したい

    お世話になっております。 Javaで、よくXMLのNodeをXPathを使って検索する例を見かけるのですが、 逆に、XML中のNodeからXPathのロケーションステップを調べる方法は どうやったらよいでしょうか。 Nodeには必ずユニークなロケーションステップが割り当てられるので、 APIがあればできそうな気がするのですが、分かりません。 Java SE 6 APIでできるならベストですが、OSSのライブラリを使っても 構いません。ご存知の方がいらっしゃったらご教示ください。

    • ベストアンサー
    • Java
  • 2つのXMLファイルを読み込む

    こんにちは、Makotoと申します。 2つのXMLファイルを読み込んで 1つのnode型のオブジェクトに代入したいのですが、 そのようなことはできるのでしょうか?

    • ベストアンサー
    • Java
  • XMLの要素の内容の中に要素

    VisualBasic6.0にて、XMLを作成するプログラムを作っています。 XMLの作成、編集はMSXMLを使用しており、編集保存はできたのですが、下記のような要素の出力の仕方がわかりません。 <Node1>  あいうえお  <Node1-1>abcde</Node1-1>  かきくけこ </Node1> このように要素の文字列の途中に子要素を作成したいです。 「Node1」要素に、子要素「Node1-1」を追加するサンプルです。 Cドライブ直下に以下の内容のXMLファイル「test.xml」を作成 <?xml version="1.0" encoding="shift_jis"?> <Node1> </Node1> VB6にて、参照設定に「Microsoft XML V6.0」を追加し以下のコードを作成。 Private Sub Command1_Click() Dim xDoc As MSXML2.DOMDocument Set xDoc = New MSXML2.DOMDocument Dim node As IXMLDOMNodeList Dim Addnode As IXMLDOMNode Dim obj As IXMLDOMNode If xDoc.Load("C:\test.xml") Then Set node = xDoc.documentElement.selectNodes("/Node1") For Each obj In node Set Addnode = obj.appendChild(xDoc.createNode(NODE_ELEMENT, "Node1-1", "")) Addnode.Text = "abcde" Next xDoc.save ("C:\test.xml") End If Set xDoc = Nothing End Sub

  • excelvbaでxmlファイルの内容の抽出

    excelvbaでDomを使用し指定したxmlファイルを読み込んでselectNodes("")で欲しい内容を抽出をすることは出来ました。 しかしxmlファイルが大量にあり一つ一つファイルを指定して抽出するのは時間がかかりすぎてしまいます。 ですのでフォルダ内にあるすべてのxmlファイルからselectNodes("")で欲しい内容を抽出したいのですが出来ますでしょうか? また抽出したものをmdbのテーブルにレコードとして保存したいのですが 現在はexcelのセルに書き込んでからmdbに入れているのですが vbaで欲しい内容を抽出した結果をそのままmdbに保存する方法はありますか? お願い致します。 下記に指定したxmlファイルを読み込んで欲しい内容を抽出するというのを行ったときのものを載せておきます。 Dim XDoc As MSXML2.DOMDocument Dim Node As MSXML2.IXMLDOMNode Sub てすと() Set XDoc = New MSXML2.DOMDocument If XDoc.Load(ThisWorkbook.Path & "\テスト.xml") = False Then With XDoc.parseError Debug.Print .errorCode & " / " & Replace(.reason, vbCrLf, "") Debug.Print "行 :" & .Line & " , カラム :" & .linepos Debug.Print "内容 :" & .srcText Debug.Print "" Debug.Print "ファイル(URL) :" & .url Debug.Print "ファイル先頭からの位置 :" & .filepos End With Exit Sub End If Debug.Print "読み込み成功" For Each Node In XDoc.selectNodes("抽出したい内容") Cells(1, 1) = Node.Text Debug.Print Node.Text Next Set XDoc = Nothing End Sub

  • JavaでXMLをファイルからじゃなく扱いたい

    Javaで例えば、String変数に String str = "<xml sample>hogehoge</xml sample>" みたいにXML形式のデータが入っているとして、このデータを、XMLファイルをDOMで扱う時のように扱えないでしょうか?一度、ファイルに書きだして、XMLファイルとして読み込ませないと難しいでしょうか?

    • ベストアンサー
    • Java
  • PerlによるXMLファイルの解析&出力

    XMLファイルで以下のようなXMLファイルから、 <?xml version="1.0" encoding="Shift_JIS"?> <class3> <Personal> <No>1</No> <Name>相上男</Name> <phone>00-0000</phone> </Personal> <Personal> <No>2</No> <Name>柿句毛子</Name> <phone>11-1111</phone> </Personal> </class3> perlでNameの部分のタグだけ抜き出しXMLファイルに出力するプログラムを組み立てたいです。自分でも以下のようなプログラムを組み立てたのですが、 #!/usr/bin/perl use strict; use Encode; use XML::XPath; use XML::XPath::XMLParser; # 書き込み用にファイルを開く open( OUTPUTFILE, ">Output2.xml" ); # 標準出力に書き出し print &xml_xpath; # ファイルを出力先に設定 select( OUTPUTFILE ); # 出力先を元に戻す select( STDOUT ); # ファイルを閉じる close( OUTPUTFILE ); sub xml_xpath{ my $file = "class3.xml"; my $xp = XML::XPath->new(filename => $file); foreach my $node( $xp->find('/class3/Personal/Name')->get_nodelist){ print Encode::encode("shift_jis", $node )."\n"; } } XML::XPath::Node::Element=REF(0x1036c58c) XML::XPath::Node::Element=REF(0x1036cb8c) と、出てくるだけで動きません。ほとんど初心者なのでまったく見当違いのプログラムを組み立てているかもしれませんが、よろしくおねがいします。

  • java XMLファイル 操作

    現在javaにてXMLファイルにデータベースの接続情報を保存する処理を 作成しています。XMLファイルの読み書きは問題なく動作するのですが、テストの為にXMLファイルを更新(データベースの接続情報は誤りの状態)にしました。その後データベースに接続して行う処理を行う際にはエラーとなる事を期待しているのですが、正常に処理されてしまいます。XMLファイルを更新した時点でテキストエディタ等で確認すると確かに更新されています。 なぜデータベースに接続して行う処理が正常に流れるのか疑問です。 ただし、いったんシステムの実行を終了して、再度実行すると、期待通りエラーとなります。 何か分かる方がいらっしゃればと思い質問いたしました。 <XML読込> public Object readXML(){ Object objBean = null; try{ // XMLからオブジェクトへの変換オブジェクトを生成する。 XMLDecoder xmlDecoder = new XMLDecoder( new BufferedInputStream( new FileInputStream(this._strFile))); // 指定したXMLファイルからオブジェクトにデータを読み込む objBean = xmlDecoder.readObject(); // 変換オブジェクトを閉じる xmlDecoder.close(); }catch(FileNotFoundException e){ // 指定されたパス名で示されるファイルが開けなかった場合の例外 bs.Setlog("readXML","FileNotFoundException",e.getMessage()); } <XML書込> public Boolean writeXML(Object objBean){ try{ // オブジェクトからXMLへの変換オブジェクトを生成する XMLEncoder xmlEncoder = new XMLEncoder( new BufferedOutputStream( new FileOutputStream(this._strFile))); // 指定したXMLファイルにオブジェクトデータを書き込む xmlEncoder.writeObject(objBean); // 変換オブジェクトを閉じる xmlEncoder.close(); // XMLファイル書込成功 return true; }catch(FileNotFoundException e) { // 指定されたパス名で示されるファイルが開けなかった場合の例外 bs.Setlog("writeXML","FileNotFoundException",e.getMessage()); return false; // 書込失敗 } }

    • ベストアンサー
    • Java
  • XML::XPath でXMLを修正して出力するには?

    XML::XPath を使って以下のようなソースを書きましたが、出力の方法がわかりません。 ++++++++++++++++ use strict; use XML::XPath; my $filename = "test.html"; my $xp = XML::XPath->new(filename=>$filename); my @nodeset = $xp->findnodes("//div[attribute::class='center']//img[attribute::class='right'"); for my $node ( @nodeset ){ print $node->removeAttribute('class'), "\n"; } print $xp; 1; ++++++++++++++++++++++++++++ 最後の print $xp のところで、修正後のXMLを出力したいです。 修正後のXMLをテキストとして出力(変数に入れるでも、標準出力でも)するには、どうすればよいのでしょうか?

    • ベストアンサー
    • Perl
  • XMLDOMのsaveメソッドのエラー

    ASPでXMLDOMを使ってxmlファイルを出力したいんですが、 エラー タイプ msxml3.dll (0x80070005) アクセスが拒否されました。 と表示され、ファイルが作成されません。 xmldoc.save(ファイルパス)の部分で引っかかっているみたい なんですが、これはマシン側の設定の問題でしょうか?