[[20240208223040]] 『VBAでXMLエンコードして出力』(凡人会社員) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでXMLエンコードして出力』(凡人会社員)

<具体的なXMLデータを提供できず申し訳ございません>
以下のコードで出力するとなぜか最終行の「<Data>」の最終文字「>」が複製されて「<Data>>」になる。
この問題を解決したい。
原因は文字化けしたBOMスキップのMid部分にありそうで、
ここをコメントアウトすると複製されなくなる。
しかしその場合は不要な「・ソ」が冒頭についてしまう。
stream.WriteText XMLの直前のDebug.Printでは最終行は正常。
アドバイスやお助けを願います。
※試しに最終文字の「>」も削除してみたら「<Dataa>」になりました…

Sub XML_Exp()

    Dim p_path As String
    Dim XML As String
    Dim stream As Object

    p_path = "C\Desktop\output.xml"

    ActiveWorkbook.XmlMaps("XMLマップ").Export URL:=p_path, Overwrite:=True

    ' ADODB.Streamオブジェクトを作成
    Set stream = CreateObject("ADODB.Stream")
    stream.Type = 2 ' テキストタイプ
    stream.Charset = "utf-8" ' 元の文字コードを指定
    stream.Open
    stream.LoadFromFile p_path

    ' 文字コードをShift_JISに変換
    stream.Charset = "shift-jis"
    XML = stream.ReadText

    ' XML宣言行のエンコーディング属性を更新
    XML = Replace(XML, "encoding=""UTF-8""", "encoding=""shift_jis""")

    ' 文字化けを修正
    XML = Replace(XML, "縺ェ縺・", "なし<")
  ' BOMの2文字をスキップ(文字化け「・ソ」)
    XML = Mid(XML, 3)

  ' Debug.Print XML

    ' 更新したXMLを再度保存
    stream.Position = 0
    stream.WriteText XML
    stream.SaveToFile p_path, 2 ' 上書き保存

    stream.Close
    Set stream = Nothing
End Sub

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


 UTF-8でエンコードされたXML=>Shift_JISでエンコードされたXMLに変換するという事ですか?
 もし、そうなら理由を教えてください。
 逆ならわかりますが、わざわざ文字化けの可能性があるのに、そうする理由が知りたいです。
(まる2021) 2024/02/09(金) 00:45:24

おっしゃる通りです。
理由はXMLデータを使用するソフトウェアの都合上shift_jisにする必要があるのです。
本件やはり文字化けなのでしょうか…
「>」自体はタグとしてデータ内にたくさん存在していますし、「>」を消すと「<Dataa>」と今度はaが複製されるのが何とも不思議で困っております。
元々やりたいこと自体がVBAでは厳しいことは重々承知ではありますが、試行錯誤の上ここまで近づけたので、もう少し頑張りたいです。
(凡人会社員) 2024/02/09(金) 08:28:58

 >' 文字コードをShift_JISに変換
 >  stream.Charset = "shift-jis"
 >   XML = stream.ReadText
 これは、Shift-JISだとしてファイルを読んでいるので、
 元のファイルがUTFだったら文字化けするのは当然だと思います。

 UTFで読んで、Shift-JISで書き出す と言う処理にしないと。

 読み込むStream(UTF)と書き出すStream(Shift-JIS)は別々に準備してください。

 同じStreamに書き出していますが、
 元々のファイルサイズより書き込むテキストのサイズが小さい場合に、
 どうなるのか分かりません。(EOF:ファイルの終端はどこになるんでしょうね?)
(´・ω・`) 2024/02/09(金) 08:53:23

ご返信ありがとうございます。

<?xml version="1.0" encoding="shift_jis" standalone="yes"?>
<data1>

	<data2>A</data2>
</data1>

上記のような簡易なXMLでは該当症状は発生しませんでした。
おっしゃる通り読み込みと書き出しを一度分けてやってみます。
(凡人会社員) 2024/02/09(金) 09:08:45


完璧に動作することができました!!!!!
感謝感激です!!!!!
(凡人会社員) 2024/02/09(金) 09:26:48

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.