関連記事
- 【memory leak】メモリーリーク発生...ドロドロドロ 【2025年10月27日(月)】
- う~~忙しい!あ~~忙しい!! 【2025年09月24日(水)】
- 【#ChatGPT】ChatGPTのヤロー(怒 SJIS変換サンプルコード,嘘コード吐いてやがった.原因対応に2時間も悩んだぞー 【2025年02月22日(土)】
- ぎんゆぅ~さんの更新頻度が落ちているときは仕事炎上中(爆 【2025年01月09日(木)】
- 仕事が納まった,のか?一応,拘束解除命令が出たモルモルモル 【2024年12月27日(金)】
ここのページにサンプルがありまして
コードを抜粋しておきます
procedure SaveXMLToFile(FileName: TFileName);
var
lStringList: TStringList;
Writer: IMXWriter;
Reader: IVBSAXXMLReader;
begin
Writer := CoMXXMLWriter.Create;
Reader := CoSAXXMLReader.Create;
Writer.byteOrderMark := True;
Writer.omitXMLDeclaration := False;
Writer.indent := True;
Reader.contentHandler := Writer as IVBSAXContentHandler;
Reader.dtdHandler := Writer as IVBSAXDTDHandler;
Reader.errorHandler := Writer as IVBSAXErrorHandler;
Reader.putProperty('http://xml.org/sax/properties/lexical-handler', Writer);
Reader.putProperty('http://xml.org/sax/properties/declaration-handler', Writer);
Reader.parse(FDoc);
lStringList := TStringlist.Create;
lStringList.Text := Writer.output;
lStringList.SaveToFile(FileName);
end;
んで,お手軽にインデント付きでXMLが出力できるんですが…XMLファイルの先頭が必ず
<?xml version="1.0" encoding="UTF-16" standalone="no"?>に
エンコード,UTF-8で出したいのに,UTF-16でしか,出力できない感じ orz
んで,まえ,学校プロジェクトで吐き出していたXML@VC++版は,エンコードが,綺麗にS-JISと出てたよなぁ~
と思い出し…
んで,つらつら調べたら
エンコードを変えるには,IStreamを使うしか,手がなさそうな感じ…
VC++版を気合入れて,Delphi版へ書き換えてみましたわぁ~
あ,外部のpasファイルがいりますんで,注意!
//uses ShLwApi;
//**********************************************
//インデントつきでXMLの保存
//
//**********************************************
procedure TClaimOutput.SaveIndentXML(fname: string; pDoc: IXMLDOMDocument);
var
stmFile : IStream;
wrt : IMXWriter;
rdr : IVBSAXXMLReader;
begin
SHCreateStreamOnFile(
PChar(fname),
STGM_READWRITE or STGM_SHARE_DENY_WRITE or STGM_CREATE,
stmFile
);
wrt := CoMXXMLWriter.Create;
wrt.indent := True;
wrt.encoding := 'utf-8';
wrt.version := '1.0';
wrt.output := stmFile;
rdr := CoSAXXMLReader.Create;
rdr.contentHandler := wrt as IVBSAXContentHandler;
rdr.parse(pDoc);
end;
SHCreateStreamOnFile()を利用するため,ShLwApi.pasがいりますDelphi5じゃ,なかったです
んで,ここから,ダウンロードしてきました
とりあえず,インデント付きでXMLは出力されていますわぁ~~♪

コメント
【#イラン戦争】イラン最高指導者ハメネイ師が死亡 トランプ大統領 SNSに投稿
土砂降りじゃー 春の雨が降りまくってる
今週は天気が悪いっぽい.ようやっと雨が定期的に降りだした
【#花粉症】目が腫れてキターくしゃみも止まらん.いよいよ花粉もピークか?
【#衆議院選挙2026 】自民 316議席獲得 単独で3分の2超 中道は49議席
【#衆議院選挙2026 】自民単独で過半数大きく上回り300議席に達する可能性
【BW55T】UPSが死んだ...ドロドロドロ😭これは人類滅亡間違いなし!なので発注(爆
広島カープの羽月隆太郎容疑者、「ゾンビたばこ」使用の疑いで逮捕