- PR -

Xerces C++ 出力されるファイルの内容について

1
投稿者投稿内容
かず
会議室デビュー日: 2006/07/18
投稿数: 6
投稿日時: 2006-07-18 15:22
初めて投稿させて頂きます。
どうぞよろしくお願いします。

ライブラリ:Xerces C++ v2.7.0
OS:Linux(SUSE)

XMLファイルに出力する際、元のXMLファイルと若干違って出力されてしまいます。
なぜなのでしょうか??

(元)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE aaaaa SYSTEM "xxxxx.dtd">
<aaaaa version="1.0">
<bbbbb>
<ccccc>hogehoge</ccccc>
<ddddd>hugahuga</ddddd>
</bbbbb>
</aaaaa>

(出力後)
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE aaaaa SYSTEM "xxxxx.dtd"><aaaaa version="1.0">
<bbbbb>
<ccccc>hogehoge</ccccc>
<ddddd>hugahuga</ddddd>
</bbbbb>
</aaaaa>

違いは、
1.最初のxmlタグに、standalone="no"が付加されます。
2.<aaaaa version="1.0">前の改行がなくなってしまいます。

以下がソースの抜粋です。
皆様、どうぞ、ご教授お願いします。

// DOMパーサオブジェクトを生成
XercesDOMParser* parser = new XercesDOMParser();
parser->setValidationScheme(XercesDOMParser::Val_Always);
parser->setDoNamespaces(true);

// DOMWriterオブジェクト(シリアライザー)を生成
DOMImplementation* impl = DOMImplementationRegistry::getDOMImplementation(XMLString::transcode("LS"));
DOMWriter* theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();

// 出力時のエンコーディングを設定
theSerializer->setEncoding(XMLString::transcode("UTF-8"));

parser->parse("fromXML.xml");

// ドキュメントオブジェクトを取得
DOMDocument* doc = parser->getDocument();

// ルート要素を取得
DOMElement* root = doc->getDocumentElement();

// ウォーカを生成
DOMTreeWalker* walker = doc->createTreeWalker(root, DOMNodeFilter::SHOW_ALL, '\\0', true);

ウォーカのループで、内容を編集(ここは、省略します。)

// XMLファイルに書き出す
XMLFormatTarget* fileFormatTarget = new LocalFileFormatTarget("toXML.xml");
theSerializer->writeNode(fileFormatTarget, *doc);


以上です。
どうぞよろしくお願いします。


MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-07-18 16:50
第9回 Standaloneと究極の外部非依存文書
http://www.atmarkit.co.jp/fxml/rensai/xmlwomanabou09/learning-xml09.html

xml のメガネを通して見ると「同じ」ですから、改行の有無はどうとも言えません。
かず
会議室デビュー日: 2006/07/18
投稿数: 6
投稿日時: 2006-07-19 00:50
MMXさん、お返事ありがとうございます。
ご紹介頂いた、サイトをみました。

Standaloneについてだいたい理解することができました。

今回の場合、元のXMLファイルに、standalone="no" が必要だったということでよいでしょうか?

改行の件ですが、XMLとして処理するには、特に必要ないのですが、見た目で問題になってしまいます。
何とか、制御することはできないのでしょうか??



MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-07-19 11:22
>今回の場合、元のXMLファイルに、standalone="no" が必要だったということでよいでしょうか?
xml パーサーが読み取った結果はそうだった。
検証yesで使用した DTD から発生した性質ですから、指定しなくともいいのでは。
standalone="yes" に変えても、読込みスピード差はないでしょう。

>見た目で問題
xml範囲外 の性質 ですから、後加工とか、出力オプション探しになります。
DOM木をメモり上に構築した時点で、元テキストの空白類は処理済になっています。
------
ソース八苦に挑戦してもいいかも。

[ メッセージ編集済み 編集者: MMX 編集日時 2006-07-19 11:25 ]
かず
会議室デビュー日: 2006/07/18
投稿数: 6
投稿日時: 2006-07-21 13:57
MMXさん、お返事ありがとうございます。

>見た目で問題
>xml範囲外 の性質 ですから、後加工とか、出力オプション探しになります。
そうなんですか。。。
出力されるXMLファイルは、XMLとしては問題ないので、現状、よしとすることにしました。
後加工は、余裕があったら、やりたいですが。。。
理想は、出力オプションです。いろいろ、試してみましたが。。。

今後とも、何かよい情報ありましたら、よろしくお願いします。

1

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