関連記事
- VC++のXMLパーサをC#で書き直しているが,XMLな実装作業の苦行なことモルモルモル 【2022年05月10日(火)】
- 【#TensorFlow】TFLiteなCーAPIを実装中 頭痛してきた(汗 【2022年02月07日(月)】
- 【#TensorFlow】TensorFlow with C++でAIシステム試験アプリを実装してみた YoutubeにAI作動動画をアップしたべ 【2022年01月20日(木)】
- 【#CSharp #VCPP】P/Invokeの沼にハマってたぁ~ ガベージがいたずらしまくる(汗 (C#の部) 【2022年01月13日(木)】
- 【#CSharp #VCPP】P/Invokeの沼にハマってたぁ~ ガベージがいたずらしまくる(汗 (C++の部) 【2022年01月13日(木)】
ここのページにサンプルがありまして
コードを抜粋しておきます
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は出力されていますわぁ~~♪
コメント
いきなり熱中症か?ダルいし頭痛い!
「ネットカジノで全部使った」4630万円誤送金の男性 関係者へ明かす
【独自】北朝鮮技術者、日本のスマホアプリ開発…報酬不正送金容疑で知人ら書類送検へ
【#新型コロナ】死者3万人以上の予測も 北朝鮮、パニック防止に懸命―新型コロナ
フィンランド NATO加盟申請を正式表明
【#最重大非常事件】北朝鮮で新型コロナ初確認 「最重大非常事件」、封鎖を指示
んにしてもずっと雨じゃなぁ もう梅雨なのか?(22/5/11)
宮崎:県内GW 海も山もにぎわった 観光需要 復調の期待(22/5/11)
【訃報】「ダチョウ倶楽部」のメンバー 上島竜兵さん死去 61歳