• ベストアンサー

DOMのXML宣言値の変更

XMLファイルをXMLパーサを使ってDOMにDocumentクラス変換します。 その変換してできたオブジェクトを操作して、 XML宣言のencodingの値を変更することは可能でしょうか?

  • ns18
  • お礼率53% (55/102)
  • Java
  • 回答数3
  • ありがとう数4

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

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

> さっそく試してみました。 > ですがencodingの値は変わりませんでした・・・ 試してみましたけど、変わりますよ。 文字列 → DOM → 文字列 と変換してます。 String msgText = "<aaa><bbb /></aaa>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); document = builder.parse(new InputSource(new StringReader(msgText)) ); TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(); tf.setOutputProperty(OutputKeys.ENCODING, "UTF-7"); // ※ここ DOMSource ds = new DOMSource(document); StringWriter sw = new StringWriter(256); StreamResult rs = new StreamResult(sw); tf.transform(ds, rs); System.out.println(sw.toString()); setOutputProperty() をしなければ、UTF-8 になるところを、UTF-7 に 指定してます。

ns18
質問者

お礼

できました!!!ありがとうございます。m(_ _)m でも、 <?xml version='1/0' encoding='Shift_JIS'?> <a> <b>B</b> <c>C</c> </a> てなXMLの文字コードを変換して表示すると、改行がなくなっちゃうんですよね。 <?xml version='1/0' encoding='UTF-8'?><a><b>B</b><c>C</c></a> みたいに。 これは、我慢するしかないのかなあ。。。 まあ、とりあえずencodingの値を変更することはできました。 詳しい処理をご教授頂き、ありがとうございました。

その他の回答 (2)

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

> てなXMLの文字コードを変換して表示すると、改行がなくなっちゃうんですよね。 いや、改行も #text ですから、改行がなくなっちゃうということは、Document を 改変しているということになってしまうので、それはありませんよ。 # 確かめもせず書いていますけど (^^;

ns18
質問者

お礼

すみません。なんか勘違いしていました。なんでだろ? 改行はなくなっていませんでした。 とにかく、何度も回答頂きありがとうございました。 たいへん参考になりました。

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

DOM に対して指定するのではなく、Transformer で変換するときに指定することになります。 多分、こんな感じ。 Document doc; Result result; // ← 適当なのが割りあたっているとして Transformer tf = TransformerFactory.newInstance().newTransformer(); tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); // ← これ tf.transform(new DOMSource(doc), result); 詳しくは、JAXP のマニュアルの、Transformer#setOutputProperty と OutputKeys のあたりを参照ください(→参考URL)。 # ごめんなさい、試してません :-)

参考URL:
http://java.sun.com/xml/jaxp/dist/1.1/docs/api/index.html
ns18
質問者

お礼

回答ありがとうございます。 さっそく試してみました。 ですがencodingの値は変わりませんでした・・・ やはり無理なんでしょうかねえ。 もう少し自分で調べてみます。 ありがとうございました。

関連するQ&A

  • XML-DOMについて

    XML-DOMを使いたいのですが、サーバにはXMLパーサは入っていてXML-DOMがないのです。XML-DOMをサーバにコピーして使用できると聞いたのですが、CPANからダウンロードしたXML-DOMの中の、どのファイルをあげればいいのでしょうか? CGIから呼び出す?時は、どのように書くのでしょうか? 初心者なもので宜しくお願い致します。

  • DOMでパースしているXML全体の出力方法

    お世話になります。 JavaでDOMを使ってXML操作をしたいと考えております。 おおよそ、以下のソースでparseできるところまで確認できました。 DOMParser parser = new DOMParser(); parser.parse("XMLファイルパス"); Document doc = parser.getDocument(); 開発中なので、DOM操作した結果のXMLを随時コンソールやログに 出力させたいのですが、たとえばdoc.toString()してもnullとなり、 正常に出力されません。 以下のようにElementを取得すると正常にアクセスできていることは 確認しています。 Element rootEl = doc.getDocumentElement(); System.out.println(rootEl.getNodeName()); なお、DOMライブラリにはxercesを用いております。 Dom4jのAPIも見てみましたが、それらしいメソッドを見つけることが できていません。 簡単にXMLを出力できることが理想です。 一般的な方法、よくやる手法など、みなさんよりご教示頂きたいです。

    • ベストアンサー
    • Java
  • XML DOM XMLパーサーについて理解していません

    XMLについてイマイチ理解していないので教えてください。PHPでXMLファイルを開いて何らかの処理をするとします。例えば <?php //ドキュメントオブジェクトの作成 $doc = new DOMDocument(); //XML 文書ファイルのパース(DOM ツリーの作成) $doc->load("docs/td101.xml") //要素"b"を取得する $bElement = $doc->getElementsByTagName("b")->item(0); //取得した要素"b"に属性"ad"を設定する $bElement->setAttribute("ad","Fukuoka"); //ドキュメントをシリアライズする $doc->save("docs/result101.xml"); ?> のようにXMLファイルに属性を追加するという処理を行うとします。この時、DOMはPHPによって生成されるんでしょうか?またXMLはXMLパーサーによって解析されると本で読んだのですが、この場合PHPがXMLパーサーの機能を持っているんでしょうか?それともブラウザにXMLパーサーの機能があり、ブラウザ側で処理をされているのでしょうか?意味がわからなくて申し訳ないですが、この辺りを理解していなくて・・・御願いいたします。

    • ベストアンサー
    • XML
  • XML::DOM / XML::XPathでソート

    XML::DOMで効率的なソートの方法はどんなものがありますでしょうか。 一応動くものは作れたのですが、効率的とは言い難く、しかも ソート項目が一意のデータでないといけないという欠点があります。 ############################################### use XML::DOM::XPath; my $xml = <<EOM; <?xml version="1.0" encoding="UTF-8" ?> <list> <item id="10">Apple</item> <item id="5">Orange</item> <item id="20">Melon</item> </list> EOM my $parser = XML::DOM::Parser->new(); my $doc = $parser->parse( $xml ); ## <item>タグの一覧を作成 my @list = $doc->findnodes('/list/item'); ## <item>タグ id属性一覧を作成 my @idlist = map{ $_->getAttribute("id") } @list; ## id属性順にソート foreach my $id ( sort{ $a<=>$b } @idlist ){ ## id属性値を指定してノードリストを取得 my @item = $doc->findnodes('/list/item[@id='.$id.']'); ## idは一意なのでリストの先頭で固定 print $item[0]->getAttribute('id')."\n"; print $item[0]->getFirstChild->getNodeValue."\n"; } ############################################### ハッシュなら sort{ $hoe{$b} <=> $hoe{$a} } keys %hoe といった方法があるのですが、XML::DOMの場合は同じようにいきません。 良い方法がありましたらお願いします。

    • ベストアンサー
    • Perl
  • XMLパーサの種類について混乱してます

    XSLTをいじる必要に駆られて、現在Java1.4+JAXP1.1を利用しています。 いままで、javax.xml.transformをimportしてメソッドを実行するだけで、「変換系に何を使っているのか」については全く気にしていなかったのですが、その実体は何なのでしょうか? (XTとかXalanとか、単体の変換系がありますよね・・・?) また、DOMパーサ、SAXパーサもJAXPで使えますが、各々のパーサや変換系を集めてパッケージにしたものがJAXPなんでしょうか。 さらに、勉強中にXMLパーサという単語が出てきて混乱しています。XMLパーサは、DOM・SAX・XSLT等とは違うのでしょうか? (XMLパーサと名乗っているXercesは何に使うのでしょうか・・・) DTDとの関連も含めて解説して頂けたら嬉しいです。

    • ベストアンサー
    • Java
  • jdkで使用されているXMLパーサ

    いつもお世話になります。 jdkで使用されているXMLパーサは何なのでしょうか。 javaでXMLを操作するに当たり、jaxpというapiが用意されていますが、jaxpはあくまでdomやsaxの 実装クラスをラップしたものだという認識でいます。 では何の実装クラスが使われているのでしょうか。各パージョンで何が使われているのか知りたいです。 また、ここら辺の事を説明しているサイトがあれば教えて頂けると嬉しいです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • DataSetのwriteXmlでのXML宣言

    お世話になります。 VB.NETでdatasetの値をXMLファイルに書いていますが、XML宣言部が書かれません。 同じような事象を検索してみましたが、該当するものはありませんでした。 またMSDNにも特に注意事項は記載されていません。 コードは以下のとおりとなります。 Dim filename As String = "C:\Documents and Settings\inui\My Documents\testXml\xmlWrite\XF_RACE.61.20110204.1.xml" ' Create an XmlTextWriter with the fileStream. Dim = New IO.StreamWriter(filename, False, _ System.Text.Encoding.GetEncoding("shift_jis")) ' Write to the file with the WriteXml method. _Dataset.WriteXml(xmlWriter) xmlWriter.Close() ご教授お願いしたします。

  • [JS] htmlをパースしてdomにしたい

    テキストのhtmlライクの構文があります。 これをパースして、dom構造のオブジェクトに変換したいです。 createElement("div")して、innerHTMLに入れる方法の場合、 IEではhtmlで定義されていないタグ名が無視されてしまうため、不可です。 xmlのパーサに食わせる方法の場合、 テキストが厳密にxml構文に沿っていないとエラーとなるので、 閉じタグ漏れがあるテキストを処理できないため、不可です。 パースする関数を作成するしかないかと思っています。 すでに誰かが作成していそうですが、探しても見つかりませんでした。 こうやって作った、とか、参考となるページなどありましたら教えてください。

  • PHPのDOMでXML読み込もうとしているのですが...

    PHPのDOMでXML読み込もうとしているのですが、getElementsByTagNameがうまくいきません。 PHPのバージョンは5です。 コードは以下のとうりです。 $document = new DomDocument('1.0'); $document -> Load('test.xml'); $items = $document -> getElementsByTagName('item'); if(!is_null( $items)){ echo count($items); echo "ok"; } XMLにitemノードは3つあるので、 echo count($items); で 3が返ってくると思うのですが、1しか返ってきません。 $items -> value でも何も表示されません。 でも cho "ok"; の ok は表示されます。 すみません。どなたかどこが間違っているのか教えていただけると助かります。

    • ベストアンサー
    • PHP
  • XMLの読み込み

    DocumentBuilderFactory,DocumentBuilder等を使って XMLドキュメントの読み込みを行っています。 例えば、以下の様なXMLドキュメントがあった時 <text>内の読み込みを行うと、テキストテキスト2と なってしまいます。 「テキスト<p/><p/>テキスト2」として取得したいのですが 何かいい方法ないでしょうか? ----------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <root> <text> テキスト<p/><p/>テキスト2</text> </root> ----------------------------------------- それとも、XMLドキュメント上、「<p/>」に意味があるのでしょうか? ※プログラム一部抜粋 //-- DOMオブジェクト初期化 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); //-- XMLファイル読み込み this.doc = docBuilder.parse(new File(strPath)); this.doc.getDocumentElement().normalize();

    • ベストアンサー
    • Java

専門家に質問してみよう