- PR -

「'」→「'」、「"」→「"」

1
投稿者投稿内容
きご
会議室デビュー日: 2008/01/07
投稿数: 2
投稿日時: 2008-01-07 21:18
コード:
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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;

public class DOM2String2 {
  public static void main(String[] args) {
    try {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse("test.xml");
      
      StringWriter writer = new StringWriter();
      Transformer transformer = TransformerFactory.newInstance().newTransformer();
      transformer.transform(new DOMSource(document), new StreamResult(writer));
      System.out.println(writer.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}



上記のようなJavaのプログラムで、XMLファイルを読み込んでその文字列を取得したいのですが、たとえば下記のXMLファイル(test.xml)を読み込んで出力した際に、

コード:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<data1>&lt;&gt;&amp;&quot;&apos;</data1>
<data2 test="&lt;&gt;&amp;&quot;&apos;"/>
</root>



結果が

コード:
<?xml version="1.0" encoding="UTF-8"?><root>
<data1>&lt;&gt;&amp;"'</data1>
<data2 test="&lt;&gt;&amp;&quot;'"/>
</root>



というようになってしまいます。
「<」→「&lt;」と同じように、「'」→「&apos;」、「"」→「&quot;」の形で取得したいのですが、どのようにすればよいのでしょうか?

よろしくお願いします。
なぎさ。
会議室デビュー日: 2007/12/21
投稿数: 9
お住まい・勤務地: カンサイ
投稿日時: 2008-01-08 17:25
はじめましてなぎさ。です。

どのバージョンのJ2SEを利用しているかわかりませんが。
J2SE 1.4は DOM Level 2 API
J2SE 5.0以降は DOM Level 3 API
を利用しています。
J2SEのバージョンは関係無いと言えば無いのですが
参考

そもそもなぜそのように出力したいのかわかりかねますが・・・

読み込んだ時点で &apos; は自動的に文字 ' に置換されます。
その展開ルールを決めている仕様がXML1.0で
XMLプロセッサは置換された文字列を扱うことが決められています。
出力されるときはXML1.0仕様に基づき変換するため
存在できる ' は &apos; に置換する必要が無いため変換されません。


試しに
Document document = builder.parse("test.xml");
を実行した直後ブレークポイントで停止し
変数document.fNodeValue[0][0-99][11]
ですでに <>&"' に変換されていました。

環境
NetBeansIDE6.0
J2SE6.0

' と &apos; はXML上では等価なので特に問題無いと思えるのですが・・・
見た目はともかくXML1.0の仕様です
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2008-01-08 18:27
どーしても見た目を変えたいのなら、そのStringWriterから作ったStringに対して文字列置換をしてしまうか、DOMのシリアライズ処理でTransformerを使わずに自分で処理を書く、などになると思います。

なぎささんも書いているように、XML的には意味は同じです。もし開発しているモノの仕様として'などを使わなければならないとなっているなら、その妙な仕様を変えるべきです。
きご
会議室デビュー日: 2008/01/07
投稿数: 2
投稿日時: 2008-01-08 19:08
なぎさ。さん、スフレさん
お二人とも回答ありがとうございました。

相手側のシステムにXMLを送信する際に「'」→「&apos;」、「"」→「&quot;」として送信するという仕様になっていたため、今回の質問をしました。

私自身勘違いしていたのですが、「<」、「>」、「&」についてはXML仕様で意味を持つ文字なので「&lt;」などに置き換える必要があるので、それと同じように「'」、「"」についても置き換えなければならないのかと思っていました。

XML仕様上同じなのですね。相手のシステムの人に確認してみます。
どうしても置き換えなければならないようでしたら、スフレさんが書かれているように対応したいと思います。

ありがとうございました。


[ メッセージ編集済み 編集者: きご 編集日時 2008-01-08 19:09 ]
1

スキルアップ/キャリアアップ(JOB@IT)