開発環境:
Windows10 Pro
Visual Studio Community 2019
開発言語:
VB.NET FrameWork4.7.2
得意先とのデータのフォーマットでXMLを指定されることがたまにあります。
通常、CSVが多いのですが、数字項目の中にカンマが使えないとかいろいろ制約があります。
区切り文字にカンマではなくTabをつかったり、各項目"で囲って文字列扱いしたり、=XXXXで項目に入れたりとかいろいろ苦労されていますが、なかなかこれなという決定打はないようです。
MicroSoftが推奨している?
文字列として扱う項目は”で囲って、
数字項目は”は無し、
位取りをしている数字項目は文字列扱いをする。
というのが落としどころですが、データを読むときに、一度”で囲まれいたら、中にあるコンマを無視するとかしないといけないので、単純のSplitで、 項目分割することかできません。
項目に分割するユーザ関数を作ればよいのですが、得意先ごとCSVの形式がありますので、汎用化ができにくいので、放置していました。
そうこうしているうちに、今回、XMLの話が出てきました。
備考とかで改行をする必要性があり、改行コードを入れたりしましたが、スペースに変換されて、改行されませんでした。
XMLはHTMLと似たようなもんだからと思って
を入れたら改行されました。
当然と言えば、当然ですね
改行以外にも必要なエスケープ文字を調べました。
エスケープ文字 | 対応文字 | 内容 |
  | スペース | |
  | スペース (UTF-8) | |

 | 改行 | |
 | タブ | |

 | ラインフィード | |
< | < | |
> | > | |
" | " | ダブルコート |
' | ' | シングルコート |
&#[整数]; | 整数での文字コードに対応する文字 | |
&#[16進数]; | 16進数での文字コードに対応する文字 |
また、CSVに出力する場合は、基本改行コードがレコードの区切りとなるので、通常は改行を考えませんが、どうしても必要な場合は、ダブルコートで囲った文字列の中に含めるのだそうです。
データベースから取得する場合は、改行をスペースやTabに変換したりして、文字列項目でも改行を入れなくすることの方が多いかと思います。
XMLは構造化もできるので多く使われそうですが、意外と利用は少ないようです。