当方JAXPでXMLを扱っています。
今悩んでいることなのですが、DOMオブジェクトを保存しようとすると、実態参照をつくることができません。
何かよい方法はありませんか?
また、実態参照について、私のほうに根本的な間違いや知らなければならないことがあるのでしょうか。
よろしくお願いします。
----------サンプルソース------------
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("root");
// 実態参照を挿入
root.appendChild(document.createTextNode(""));
document.appendChild(root);
// DOMの状態では挿入したものがそのまま参照できる
System.out.println("on dom : " + root.getTextContent());
// 保存
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(System.out));
--------------結果-----------------
on dom :
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root>&nbsp;</root>
--------------望む結果--------------
on dom :
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root></root>
--------------------------------------
No.1
- 回答日時:
やあ、また会ったね。
回答しつつも,当方のJava 1.7.0-b23でまだうまくいってないんだ。
document.createTextNode
じゃなくて
document.createEntityReference
を使うんだと思う・・・んだけど・・・何故か以下のソースを実行すると
============================
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
class Q3560141A{
public static void main(String[] args){
try{
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.newDocument();
Element root = document.createElement("root");
// 実体参照を挿入
root.appendChild(document.createEntityReference("gt"));
document.appendChild(root);
// DOMの状態では挿入したものがそのまま参照できる
System.out.println("on dom : " + root.getTextContent());
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(System.out));
}catch(ParserConfigurationException ex){
System.out.println(ex.getStackTrace());
}catch(TransformerException ex){
System.out.println(ex.getStackTrace());
}
}
}
=====================
on dom :
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root/>
となってしまうんだ。ヒントになればと思って一応アドバイスしておくよ。
ちなみに質問文と違って,
on dom :
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root></root>
ではなく
on dom:>
<?xml version="1.0" encoding="UTF-8" standalone="no"?><root>></root>
を望んでいるつもりだ。
on domが>でない点に注意!
あと
×実態参照
○実体参照
ね
いつもありがとうございますー。
え、Javaついに1.7でたんですか!
早速調べなきゃ!
document#createEntityReference
は、試してみたんですけれど、himajin10万さんの結果のように、なぜか無視されるので、それが答えなのかどうかがわかりませんでした。
「on dom」で出力しているところからわかるように、きっとTransformer通すときに実体参照にもどせてないのが原因みたいなんですが・・。
あと試してみたことといえば、
DocumentBuilderFactory#isExpandEntityReferences(false)
初期値がtrueだそうで、名前からするに、実体を展開するかどうかの設定みたいなので、falseにすれば展開されずにそのまま残るんじゃないなかと思いまして・・。結果は何も変わらなかったように見えました。パースするときしか意味がないのかな??
>×実態参照
>○実体参照
ありがとうございます。
もしかしたら正しい文字列で検索すれば、もっと有益な情報が検索できるようになるかもしれません。
No.2ベストアンサー
- 回答日時:
リンク先に記述してあるように、processing-instructionをうまく利用すると、今回の私の目的は達成できるようです。
一応は解決ということで、締め切らせて頂きました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Android(アンドロイド) Androidスマホの時刻の自動同期の頻度を短くしたい 4 2022/12/02 17:29
- UNIX・Linux メールアドレスにホスト名が入らないようにする設定 2 2022/06/23 21:06
- UNIX・Linux マスターブートレコード方式のbiosを使ったシステムでインストールされたlinuxで/dev/sda 1 2023/05/13 21:23
- その他(パソコン・スマホ・電化製品) pthonのframeに演算結果(数値)を表示したい 1 2023/06/05 22:08
- HTML・CSS HTMLの条件によって表示方向が切り替わる実装のコードを教えて下さい。 (コードは下記リンクを参照) 1 2022/09/25 14:35
- C言語・C++・C# C#のSystem.Windows.Media.Colorに関する質問です。 3 2022/05/18 11:51
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- SSL・HTTPS ルート証明書の有効期限がだいぶ前なのに時計が進んでいますと表示され今日になってみれなくなったサイト 1 2022/10/26 20:35
- 英語 Systematic reviews have evaluated the efficacy of 2 2022/05/18 16:39
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインターに関する警告
-
EclipseでJava
-
JAVAのDouble型の小数点以下の...
-
会員情報登録プログラムの作成...
-
配列を後ろから数えるには?
-
エクスクラメーション2つ?
-
Javaのコマンドライン引数を使...
-
javaで判別式のプログラミング...
-
コマンドプロンプトに不正な文...
-
JSPやサーブレットでSystem.out...
-
LC発振回路-ループ利得
-
java教えてください。
-
[JAVA]try 内の変数を外で!?
-
メール送信を行うJavaプログラム
-
nullcline
-
値を入力し、入力した値から最...
-
(急募)JavaじゃんけんでGUI...
-
VBAで配列の計算
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
JAVAのDouble型の小数点以下の...
-
EclipseでJava
-
「続行するには何かキーを押し...
-
文字列の引き算
-
java シンボルが見つかりません...
-
JAVA 文字色変更
-
改行の判定方法
-
JAVAのエラーの意味が分かりま...
-
Javaのコマンドライン引数を使...
-
java教えてください。
-
曜日の取得方法を教えて下さい!
-
JavaにはなぜGO TO ...
-
Javaでカレントディレクトリを...
-
構文解析中にファイルの終わり...
-
JAVA 三角形の判定
-
複数行キーボード入力した後に...
-
printfの%fにおいて教本どおり...
おすすめ情報