このページの内容

9. 変更履歴

v1.16 2026-06-16

記念リリース(pugixmlは今年で20周年です!)。変更点:

  • 動作の変更:

    1. 空のPCDATAの子を1つだけ持つ要素は、空要素タグとして出力されるようになりました(format_no_empty_element_tagsを使う場合を除きます)。
  • 改善:

    1. PUGIXML_CHARCONV_FLOATオプションを有効にすると、浮動小数点の変換を<charconv>へ切り替えられます。C++17が必要で、変換がロケールに依存しなくなり、性能が向上する場合があります。

    2. 指定した名前の子/属性を返し、存在しなければ追加するxml_node::ensure_childとxml_node::ensure_attributeを追加しました。

    3. 名前によるノードと属性の検索の性能を改善しました。

    4. 空のバッファーから文書を読み込む場合、メモリーを確保しなくなりました。

  • XPathの改善:

    1. @attr > 5のように、属性値を評価したり比較したりする問い合わせの性能を改善しました。

    2. 名前によってノードや属性を選択する問い合わせの性能を改善しました。

  • 不具合の修正:

    1. 非常に深く入れ子になった部分ツリーを削除する場合の、スタックオーバーフローを修正しました。

    2. 32ビットプラットフォームのPUGIXML_WCHAR_MODEで非常に大きい文書(1 GB以上)を読み込む場合に、クラッシュを引き起こす可能性があった整数オーバーフローを修正しました。

    3. 値が未代入の文字列変数を含むxpath_variable_setオブジェクトをコピーする場合の、nullポインター参照を修正しました。

  • CMakeの改善:

    1. PUGIXML_BUILD_APPLE_FRAMEWORKでビルドしたAppleフレームワークに、フレームワークのヘッダーが含まれるようになりました。

    2. PUGIXML_INSTALL_SOURCEオプションで、pugixml.cppをインストールできます(ヘッダーのみのモードで役立ちます)。

  • 互換性の改善:

    1. Visual Studio 2026向けのプロジェクトファイルとNuGetパッケージを追加しました。

    2. グローバルモジュールフラグメント内でpugixml.hppをインクルードする場合の、C++20モジュールとの互換性を修正しました。

    3. clang/gccの警告-Wextra-semi-stmt、-Wsign-conversion、-Wuninitialized(GCC16)を修正しました。

    4. Embarcadero C++ XE5でのコンパイルを修正しました。

    5. 静的解析の複数の誤検出を回避しました。

v1.15 2025-01-10

保守リリース。変更点:

  • 改善:

    1. C++17対応が検出された場合、多くのxml_attribute::とxml_node::の関数が、std::string_viewとstd::stringを透過的に扱えるようになりました。
  • CMakeの改善:

    1. NixOS向けのpkg-configファイルの生成を改善しました。

    2. CMakeのPUGIXML_BUILD_APPLE_FRAMEWORKオプションで、pugixmlを.xcframeworkとしてビルドできます。

    3. CMakeのPUGIXML_INSTALLオプションで、インストールターゲットを無効にできます。

  • 互換性の改善:

    1. clang/gccの警告-Wzero-as-null-pointer-constant、-Wuseless-cast、-Wshorten-64-to-32を修正しました。

    2. PUGIXML_NO_STL設定での未参照関数の警告を修正しました。

    3. CMake 3.31の非推奨警告を修正しました。

    4. noexceptが使える場合、非推奨のthrow()を使わなくなりました。

v1.14 2023-10-01

保守リリース。変更点:

  • 改善:

    1. xml_attribute::set_nameとxml_node::set_nameに、null終端されていない文字列へのポインターとサイズを受け取るオーバーロードを追加しました。

    2. 原文書に、解析時に読み飛ばされるコメントがある場合、PCDATAの内容を単一のノードへ結合する解析モードparse_merge_pcdataを実装しました。

    3. xml_document::load_fileにフォルダーへのパスを渡す場合、より一貫したエラー状態を返すようになりました。

  • 不具合の修正:

    1. 英語以外のロケールでXPathの数値から文字列への変換を行う場合のアサーションを修正しました。

    2. MSVCと最近のCMakeを使う場合、静的CRTを正しく選択するように、CMakeのPUGIXML_STATIC_CRTオプションを修正しました。

  • 互換性の改善:

    1. GCC 2.95/3.3でのビルドを修正しました。

    2. CMake 3.27の非推奨警告を修正しました。

    3. C++03モードでコンパイルする場合の、XCode 14のsprintf非推奨警告を修正しました。

    4. clang/gccの警告-Wweak-vtables、-Wreserved-macro-identifierを修正しました。

v1.13 2022-11-01

保守リリース。変更点:

  • 改善:

    1. xml_attribute::set_value、xml_node::set_value、xml_text::setに、null終端されていない文字列へのポインターとサイズを受け取るオーバーロードを追加しました。

    2. コンパクトモード(PUGIXML_COMPACT)でのツリー走査の性能を改善しました。

  • 不具合の修正:

    1. ディスクの空き容量が不足していても関数が成功する場合があった、xml_document::save_fileのエラー処理を修正しました。

    2. xml_document::loadでメモリー不足となる一部の状況のエラー処理中に発生する、メモリーリークを修正しました。

  • 互換性の改善:

    1. CMakeを使ったDLLビルドで、エクスポートするシンボルを修正しました。

    2. -fvisibility=hiddenを使ったCMakeの共有オブジェクトビルドで、エクスポートするシンボルを修正しました。

v1.12 2022-02-09

保守リリース。変更点:

  • 不具合の修正:

    1. ムーブ元が空の場合の、xml_documentのムーブ構築の不具合を修正しました。

    2. C++20 rangesに対応するため、イテレーターオブジェクトのconstの整合性に関する問題を修正しました。

  • XPathの改善:

    1. 解析中にスタックオーバーフローを引き起こす可能性のある、過度に複雑な問い合わせの検出を改善しました。
  • 互換性の改善:

    1. DLLビルドでのCygwin対応を修正しました。

    2. Windows CE対応を修正しました。

    3. VS2022向けのNuGetビルドとプロジェクトファイルを追加しました。

  • ビルドシステムの変更

    1. すべてのCMakeオプションにPUGIXML_という接頭辞が付くようになりました。依存するビルド設定の変更が必要になる場合があります。

    2. 多くのビルド設定をCMakeの設定から指定できるようになりました。特に、pugiconfig.hppを変更せずに、PUGIXML_COMPACTとPUGIXML_WCHAR_MODEを設定できます。

v1.11 2020-11-26

保守リリース。変更点:

  • 新機能:

    1. xml_node::remove_attributesとxml_node::remove_childrenを追加しました。

    2. xml_attribute::setとxml_text::setのオーバーロードで、浮動小数点の精度を調整する方法を追加しました。

  • XPathの改善:

    1. XPathパーサーが再帰の深さを制限するようになり、悪意のある問い合わせによるスタックオーバーフローを防ぎます。
  • 互換性の改善:

    1. clang-clコンパイラーでビルドする場合の、Visual Studioの警告を修正しました。

    2. gccのWconversion警告を修正しました。

    3. pugixml.hppのWzero-as-null-pointer-constant警告を修正しました。

    4. 静的解析の複数の誤検出を回避しました。

  • ビルドシステムの変更

    1. pugixmlのCMakeパッケージは、pugixmlターゲットの代わりにpugixml::pugixmlターゲットを提供するようになりました。最低バージョン1.11を要求しない場合には、互換用のpugixmlターゲットを提供します。

v1.10 2019-09-15

保守リリース。変更点:

  • 動作の変更:

    1. 属性値のタブ文字(ASCII 9)は、保存・再読み込み後も保持するため、「&#9;」として符号化するようになりました。

    2. 属性値の>文字をエスケープしなくなりました。

  • 新機能:

    1. デバッグを改善するVisual Studioの.natvisファイルを追加しました。

    2. CMakeを改善しました(複数のバージョンをビルドするUSE_POSTFIXとBUILD_SHARED_AND_STATIC_LIBSオプション、pkg-configの調整)。

    3. 整形式XMLファイルで使用できない非表示ASCII文字を読み飛ばす整形フラグformat_skip_control_charsを追加しました。

    4. 属性値を既定の二重引用符の代わりに一重引用符で囲む整形フラグformat_attribute_single_quoteを追加しました。

  • XPathの改善:

    1. XPathの和集合の結果が、メモリー確保に依存しない安定した順序になりました。文書順の走査に依存する場合、XPath問い合わせの出力を整列する必要が生じることに注意してください。

    2. XPathの和集合演算の性能を改善し、約2倍高速にしました。

  • 互換性の改善:

    1. DLL設定でビルドする場合のVisual Studioの警告を修正しました。

    2. Coverityとclangの静的解析の誤検出を修正しました。

    3. gccのWdouble-promotion警告を修正しました。

    4. NuGetパッケージにVisual Studio 2019対応を追加しました。

v1.9 2018-04-04

保守リリース。変更点:

  • 仕様の変更:

    1. xml_document::load(const char*)(1.5で非推奨化)に、deprecated属性が付くようになりました。代わりにxml_document::load_stringを使ってください。

    2. xml_node::select_single_node(1.5で非推奨化)に、deprecated属性が付くようになりました。代わりにxml_node::select_nodeを使ってください。

  • 新機能:

    1. xml_documentにムーブセマンティクス対応を追加し、ほかのオブジェクトのムーブセマンティクス対応を改善しました。

    2. CMakeビルドがインクルードディレクトリーをエクスポートするようになりました。

    3. BUILD_SHARED_LIBS=ONのCMakeビルドで、MSVCのdllexport属性を使うようになりました。

  • XPathの改善:

    1. パーサー/評価器を、例外的な制御フローに依存しないように改めました。例外が無効な場合、longjmpを使わなくなりました。

    2. .[1]や(1など、一部の不正な式のエラーメッセージを改善しました。

    3. 性能を小幅に改善しました。

  • 互換性の改善:

    1. Texas Instrumentsコンパイラーの警告を修正しました。

    2. 一部のバージョンのgccで、limits.hに関するコンパイルの問題を修正しました。

    3. Clang/C2でのコンパイルの問題を修正しました。

    4. gcc 7の暗黙のフォールスルー警告を修正しました。

    5. gcc 8の未知の属性指定に関する警告を修正しました。

    6. cray++コンパイラーのエラーを修正しました。

    7. -fsanitize=integerでの符号なし整数オーバーフローエラーを修正しました。

    8. コンパクトモードの未定義動作検査器の問題を修正しました。

v1.8 2016-11-24

保守リリース。変更点:

  • 仕様の変更:

    1. format_rawモードで空要素を出力する場合、/の前に空白を追加しなくなりました。
  • 新機能:

    1. 可能であればPCDATAの値を要素ノードに格納する解析モードparse_embed_pcdataを追加しました(一部の文書でメモリー消費を大幅に削減します)。

    2. 解析時にLatin-1(ISO-8859-1)エンコーディングを自動検出する機能を追加しました。

    3. 空要素を空要素タグではなく開始/終了タグで出力する整形フラグformat_no_empty_element_tagsを追加しました。

  • 性能の改善:

    1. メモリー確保を小幅に改善しました(一部の場合にメモリー消費を最大1%削減します)。
  • 互換性の改善:

    1. Borland C++ 5.4でのコンパイルの問題を修正しました。

    2. 一部のMinGW 3.8ディストリビューションでのコンパイルの問題を修正しました。

    3. Clang/GCCの各種警告を修正しました。

    4. MSVC 2010以降で、XPathオブジェクトのムーブセマンティクス対応を有効にしました。

v1.7 2015-10-19

性能とメモリーの改善に加え、新機能を含むメジャーリリースです。変更点:

  • コンパクトモード:

    1. 性能と引き換えにメモリー消費を大幅に削減する、新しいツリー格納モードを導入しました(DOMの大きさは1/2~1/5)。

    2. PUGIXML_COMPACTを定義すると、このモードを有効にできます。

  • 整数の解析/整形の新実装:

    1. 整数への変換と整数からの変換を行う関数(例:as_int/set_value)が、CRTに依存しなくなりました。

    2. 新実装は3~5倍高速で、オーバーフローとアンダーフローに対して常に正しく動作します。これは動作の変更です。以前は値"-1"に対してas_uint()がUINT_MAXを返していましたが、現在は0を返します。

  • 新機能:

    1. コンパイラーがC++11に対応していれば、XPathオブジェクト(xpath_query、xpath_node_set、xpath_variable_set)をムーブできるようになりました。さらに、xpath_variable_setはコピーも可能です。

    2. 出力XMLを行単位の差分/マージツールで扱いやすくするformat_indent_attributesを追加しました。

    3. 検索性能を改善できるヒントを受け取るxml_node::attribute関数の別形式を追加しました。

    4. 独自のメモリー確保関数は、nullポインターを返す代わりに例外を送出できるようになりました(必須ではありません)。

  • 不具合の修正:

    1. メモリー不足時のClang 3.7のクラッシュを修正しました(C++ DR 1748)。

    2. SPARC64(およびdoubleを8バイト境界に配置する必要がある、ほかの32ビットアーキテクチャー)でのXPathのクラッシュを修正しました。

    3. 強い例外保証を提供するよう、xpath_node_setの代入を修正しました。

    4. write()から例外を送出できる独自のxml_writer実装での保存を修正しました。

v1.6 2015-04-10

保守リリース。変更点:

  • 仕様の変更:

    1. 保存・再読み込み時の値の保持を保証するため、属性/テキストの値で浮動小数点数を出力する場合、より多くの桁を使うようになりました。

    2. 混合内容を持つノードを整形出力する場合、テキストノードの前後に余分な空白を付けなくなりました。

  • 不具合の修正:

    1. XPathのtranslate関数とnormalize-space関数が、内部にNUL文字を含む文字列を返さないよう修正しました。

    2. DOCTYPE節内の不正な形式のコメントによるバッファー超過を修正しました。

    3. 不正な形式の入力によってDOCTYPE解析のスタック領域が不足することがなくなりました(XML解析に使用するスタック領域は、現在は上限が決まっています)。

    4. PIの値に?>が含まれる場合に、不正な形式の文書にならないよう、処理命令の出力を調整しました。

v1.5 2014-11-27

多くの性能改善と新機能を含むメジャーリリースです。

  • 仕様の変更:

    1. xml_document::load(const char_t*)をload_stringへ改名しました。旧メソッドも引き続き使えますが、今後のリリースで非推奨となる予定です。

    2. xml_node::select_single_nodeをselect_nodeへ改名しました。旧メソッドも引き続き使えますが、今後のリリースで非推奨となる予定です。

  • 新機能:

    1. 文書内でノードを移動するためのxml_node::append_moveなどの関数を追加しました。

    2. 単一のノードを結果とする問い合わせを評価するxpath_query::evaluate_nodeを追加しました。

  • 性能の改善:

    1. XML解析を最適化しました(clang/gccで10~40%、MSVCで最大10%高速化)。

    2. 同じ文書内でノードをコピーする場合のメモリー消費を最適化しました(文字列の内容を共有するようになりました)。

    3. ノードのコピーを最適化しました(文書間のコピーで10%、文書間のコピーで3倍高速化。使用するスタック領域も一定量になりました)。

    4. ノードの出力を最適化しました(60%高速化。使用するスタック領域も一定量になりました)。

    5. XPathのメモリー確保を最適化しました(問い合わせの評価に伴う一時的なメモリー確保が減りました)。

    6. XPathの整列を最適化しました(一部の場合にノード集合の整列が2~3倍高速化)。

    7. XPathの評価を最適化しました(XPathMarkスイートで100倍、一部のよく使われる問い合わせで3~4倍高速化)。

  • 互換性の改善:

    1. xml_node::offset_debugの境界的な場合の動作を修正しました。

    2. 一部の場合にmemcpyの呼び出しで発生する未定義動作を修正しました。

    3. MSVC 2015のコンパイル警告を修正しました。

    4. Boost 1.56.0に対するcontrib/foreach.hppを修正しました。

  • 不具合の修正

    1. コメントの値に--が含まれる場合に、不正な形式の文書にならないよう、コメントの出力を調整しました。

    2. append_bufferで作成した文書のXPathの整列を修正しました。

    3. C++11モードを有効にしたMinGWで、非ASCII文字を含むワイド文字のパスを使う場合のload_fileを修正しました。

v1.4 2014-02-27

各種新機能、不具合修正、互換性改善を含むメジャーリリースです。

  • 仕様の変更:

    1. parse_fragmentオプションを使わない場合、要素ノードがない文書をstatus_no_document_elementエラーで拒否するようになりました。
  • 新機能:

    1. XML断片の解析を追加しました(parse_fragmentフラグ)。

    2. PCDATAの前後の空白除去を追加しました(parse_trim_pcdataフラグ)。

    3. xml_attributeとxml_textにlong long対応を追加しました(as_llong、as_ullong、set_value/setのオーバーロード)。

    4. as_int/as_uint/as_llong/as_ullongに、16進整数の解析対応を追加しました。

    5. 断片から文書を組み立てる際の性能を改善するxml_node::append_bufferを追加しました。

    6. xml_named_node_iteratorが双方向になりました。

    7. XPathのコンパイルと評価で使用するスタック領域を削減しました(組み込みシステムで役立ちます)。

  • 互換性の改善:

    1. wchar_tに対応していないプラットフォームへの対応を改善しました。

    2. clangの静的解析の複数の誤検出を修正しました。

    3. 各種GCCバージョンの複数のコンパイル警告を修正しました。

  • 不具合の修正:

    1. XPath実装の未定義のポインター演算を修正しました。

    2. 一部のストリーム型で、シークできないiostreamへの対応を修正しました。たとえば、パイプ入力を持つBoostのfile_sourceです。

    3. 一部の式に対するxpath_query::return_typeを修正しました。

    4. xml_named_node_iteratorのdllexportの問題を修正しました。

    5. 名前/値がnullの属性に対するfind_child_by_attributeのアサーションを修正しました。

v1.2 2012-05-01

ヘッダーのみのモード、各種インターフェースの拡張(PCDATA操作、C++11の反復処理など)、多数の新機能と互換性改善を含むメジャーリリースです。

  • 新機能:

    1. 要素ノードのPCDATA/CDATA内容を操作する補助クラスxml_textを追加しました。

    2. 任意で使えるヘッダーのみのモードを追加しました(PUGIXML_HEADER_ONLYの定義で制御します)。

    3. C++11の範囲forループやBOOST_FOREACHで使うxml_node::children()とxml_node::attributes()を追加しました。

    4. 読み込みと保存で、Latin-1(ISO-8859-1)エンコーディング変換への対応を追加しました。

    5. xml_attribute::as_*に独自の既定値を追加しました(属性が存在しない場合に返します)。

    6. 空白のみのPCDATAが唯一の子の場合に、そのPCDATAを保持するparse_ws_pcdata_singleフラグを追加しました。

    7. ファイルをバイナリーではなくテキストとして開くformat_save_file_textを、xml_document::save_fileに追加しました(Windowsの改行形式が変わります)。

    8. 特殊記号のエスケープを無効にするformat_no_escapesフラグを追加しました(~parse_escapesを補完します)。

    9. シークできないストリームから文書を読み込む機能を追加しました。

    10. メモリー確保の動作を調整するPUGIXML_MEMORY_*定数を追加しました(組み込みシステムで役立ちます)。

    11. プリプロセッサー定義PUGIXML_VERSIONを追加しました。

  • 互換性の改善:

    1. パーサーがsetjmp対応を必要としなくなりました(一部の組み込みプラットフォームとの互換性が改善し、/clr:pureでコンパイルできます)。

    2. STLの前方宣言を使わなくなりました(SunCC/RWSTLでのコンパイル、C++11モードのclangでのコンパイルを修正)。

    3. AirPlay SDK、Android、Windows Mobile(WinCE)、C++/CLIでのコンパイルを修正しました。

    4. 各種GCCバージョン、Intel C++コンパイラー、Clangの複数のコンパイル警告を修正しました。

  • 不具合の修正:

    1. C++/CLIでの問題を回避するため、安全でないbool変換を修正しました。

    2. イテレーターの参照外し演算子がconstになりました(Boostのfilter_iterator対応を修正)。

    3. xml_document::save_fileが保存中のファイルI/Oエラーを確認するようになりました。

v1.0 2010-11-01

多数のXPath拡張、ワイド文字のファイル名対応、各種性能改善、不具合修正などを含むメジャーリリースです。

  • XPath:

    1. XPathの実装をpugixml.cppへ移動しました(現在はこれが唯一のソースファイルです)。コードサイズを削減するためにXPathを無効にしたい場合は、PUGIXML_NO_XPATHを使ってください。

    2. 例外を使わなくてもXPathに対応するようになりました(PUGIXML_NO_EXCEPTIONS)。エラー処理の仕組みは、例外対応の有無によって変わります。

    3. STLを使わなくてもXPathに対応するようになりました(PUGIXML_NO_STL)。

    4. 変数への対応を導入しました。

    5. STLなしで動作する、新しいxpath_query::evaluate_stringを導入しました。

    6. イテレーター範囲から作成する、新しいxpath_node_setのコンストラクターを導入しました。

    7. 評価関数が、属性をコンテキストノードとして受け取れるようになりました。

    8. 内部のメモリー確保がすべて独自のメモリー確保関数を使うようになりました。

    9. エラー報告を改善しました。解析エラーとともに、最後に解析した位置のオフセットを返すようになりました。

  • 不具合の修正:

    1. ストリームの例外を有効にしてストリームから読み込む場合の、メモリーリークを修正しました。

    2. 独自の解放関数をnullポインターで呼んでいたケースを修正しました。

    3. イテレーターカテゴリーの関数に不足していた属性を修正しました。すべての関数/クラスをDLLからエクスポートできるようになりました。

    4. 複数の関数でわずかに過剰な読み取りを引き起こしていた、Digital Marsコンパイラーの不具合を回避しました。

    5. MSVC/MinGWのload_fileが、2 Gb以上のファイルで動作するようになりました。

    6. XPath:不正な問い合わせによるメモリーリークを修正しました。

    7. XPath:空の属性引数を渡す場合のxpath_node()の属性コンストラクターを修正しました。

    8. XPath:非ASCIIの引数に対するlang()関数を修正しました。

  • 仕様の変更:

    1. ]]>を含むCDATAノードは、複数のノードとして出力するようになりました。内部構造は変わりますが、これがCDATA内容をエスケープする唯一の方法です。

    2. 解析中のメモリー確保エラーでも、最後に解析した位置のオフセットを保持するようになりました(解析がどこまで進んだかを把握するためです)。

    3. 要素ノードの唯一の子がCDATA型の場合、余分なインデントを省略します(以前はPCDATAの子にだけ適用していました)。

  • 追加機能:

    1. xml_parse_resultの既定のコンストラクターを追加しました。

    2. ワイド文字のパスを受け取るxml_document::load_fileとxml_document::save_fileを追加しました。

    3. std::wstring/std::string引数を受け取るas_utf8とas_wideのオーバーロードを追加しました。

    4. DOCTYPEのノード型(node_doctype)と、解析時にそのノードを文書へ追加する専用の解析フラグparse_doctypeを追加しました。

    5. parse_defaultに、parse_ws_pcdata以外のすべてのノード型の解析フラグを加えた、解析フラグマスクparse_fullを追加しました。

    6. ハッシュを使うコンテナー向けに、xml_node::hash_value()とxml_attribute::hash_value()を追加しました。

    7. マーシャリングを容易にするため、xml_nodeとxml_attributeの両方に、internal_object()と追加のコンストラクターを導入しました(言語バインディングで役立ちます)。

    8. xml_document::document_element()関数を追加しました。

    9. xml_node::prepend_attribute、xml_node::prepend_child、xml_node::prepend_copy関数を追加しました。

    10. 要素ノードに対して、型の代わりに名前を受け取るxml_node::append_child、xml_node::prepend_child、xml_node::insert_child_before、xml_node::insert_child_afterのオーバーロードを追加しました。

    11. xml_document::reset()関数を追加しました。

  • 性能の改善:

    1. xml_node::root()とxml_node::offset_debug()が、O(logN)ではなくO(1)になりました。

    2. 解析を小幅に最適化しました。

    3. DOMツリー内の文字列のメモリーを小幅に最適化しました(set_name/set_value)。

    4. DOMツリー内の文字列のメモリー回収を最適化しました(無駄なメモリーが多すぎる場合、set_name/set_valueがバッファーを再確保するようになりました)。

    5. XPath:文書順の整列を最適化しました。

    6. XPath:子/属性軸のステップを最適化しました。

    7. XPath:MSVCでの数値から文字列への変換を最適化しました。

    8. XPath:多数の引数に対するconcatを最適化しました。

    9. XPath:評価時のメモリー確保の仕組みを最適化しました。定数と文書の文字列をヒープ上に確保しなくなりました。

    10. XPath:評価時のメモリー確保の仕組みを最適化しました。すべての一時値のメモリー確保に、高速なスタック状のアロケーターを使います。

  • 互換性:

    1. ワイルドカード関数(xml_node::child_w、xml_node::attribute_wなど)を削除しました。

    2. xml_node::all_elements_by_nameを削除しました。

    3. 列挙型xpath_type_tを削除しました。代わりにxpath_value_typeを使ってください。

    4. 列挙型format_write_bom_utf8を削除しました。代わりにformat_write_bomを使ってください。

    5. xml_document::precompute_document_order、xml_attribute::document_order、xml_node::document_order関数を削除しました。文書順の整列の最適化が自動になりました。

    6. xml_document::parse関数とtransfer_ownership構造体を削除しました。代わりにxml_document::load_buffer_inplaceとxml_document::load_buffer_inplace_ownを使ってください。

    7. as_utf16関数を削除しました。代わりにas_wideを使ってください。

v0.9 2010-07-01

Unicode対応の拡張と改善、各種性能改善、不具合修正などを含むメジャーリリースです。

  • Unicodeの主要な改善:

    1. エンコーディング対応を導入しました(読み込み時の自動/手動検出、保存時の手動選択、UTF8、UTF16 LE/BE、UTF32 LE/BEとの相互変換)。

    2. wchar_tモードを導入しました(PUGIXML_WCHAR_MODEを定義すると、pugixmlの内部エンコーディングをUTF8からwchar_tへ切り替えられます。すべての関数がUnicode版に切り替わります)。

    3. 読み込み/保存関数がワイド文字のストリームに対応するようになりました。

  • 不具合の修正:

    1. 解析失敗時に文書が破損する不具合を修正しました。

    2. XPathの文字列/数値変換を改善しました(精度向上、非常に大きい数値でのクラッシュ修正)。

    3. DOCTYPE解析を改善しました。パーサーが、整形式のDOCTYPE宣言をすべて認識するようになりました。

    4. 大きい数値(例:232-1)に対するxml_attribute::as_uint()を修正しました。

    5. ノード名の接頭辞ではあるものの完全には一致しないパス要素に対する、xml_node::first_element_by_pathを修正しました。

  • 仕様の変更:

    1. parse() APIをload_buffer/load_buffer_inplace/load_buffer_inplace_ownへ変更しました。load_buffer APIはゼロ終端文字列を必要としません。

    2. as_utf16をas_wideへ改名しました。

    3. xml_node::offset_debugの戻り値の型とxml_parse_result::offsetの型を、ptrdiff_tへ変更しました。

    4. 名前が空のノード/属性は、:anonymousとして出力するようになりました。

  • 性能の改善:

    1. 文書の解析と保存を最適化しました。

    2. 内部のメモリー管理を変更しました。メタデータと名前/値のデータの両方に内部アロケーターを使います。確保したページ内の領域がすべて解放されると、そのページも削除します。

    3. メモリー消費を最適化しました。x86でのsizeof(xml_node_struct)を40バイトから32バイトへ削減しました。

    4. デバッグモードの解析/保存を約1桁高速化しました。

  • その他:

    1. pugixml.hpp内のSTLのインクルードを、<exception>以外はすべて前方宣言へ置き換えました。

    2. xml_node::remove_childとxml_node::remove_attributeが、操作の結果を返すようになりました。

  • 互換性:

    1. 互換性のためにparse()とas_utf16を残しています(これらの関数は非推奨で、バージョン1.0で削除する予定です)。

    2. ワイルドカード関数、document_order/precompute_document_order関数、all_elements_by_name関数、format_write_bom_utf8フラグは非推奨となり、バージョン1.0で削除する予定です。

    3. 列挙型xpath_type_tをxpath_value_typeへ改名しました。xpath_type_tは非推奨となり、バージョン1.0で削除する予定です。

v0.5 2009-11-08

主に不具合を修正するリリースです。変更点:

  • XPathの不具合修正:

    1. translate()、lang()、concat()関数を修正しました(無限ループ/クラッシュ)。

    2. 空の文字列リテラル("")を含む問い合わせのコンパイルを修正しました。

    3. 軸の検査を修正しました。結果のノード集合に空のノード/属性を追加しなくなりました。

    4. ノード集合の文字列値の評価を修正しました(結果から一部のテキストの子孫が除外されていました)。

    5. self::軸を修正しました(ancestor-or-self::と同じ動作をしていました)。

    6. following::軸とpreceding::軸を修正しました(それぞれ子孫ノード、祖先ノードを含んでいました)。

    7. namespace-uri()関数を小幅に修正しました(名前空間宣言の範囲には、名前空間宣言属性の親要素も含まれます)。

    8. 一部の不正な問い合わせを解析しなくなりました(例:foo: *)。

    9. text()などのノード検査の解析の不具合を修正しました(例:foo[text()]のコンパイルが失敗していました)。

    10. ルートのステップ(/)を修正しました。空のノードに対して問い合わせを評価する場合、空のノード集合を選択するようになりました。

    11. 文字列から数値への変換を修正しました("123 "はNaNに、"123 .456"は123.456に変換されていましたが、現在の結果はそれぞれ123とNaNです)。

    12. ノード集合をコピーする場合、整列の種類を保持するようになりました。一部の問い合わせで性能が改善します。

  • その他の不具合修正:

    1. PIノードに対するxml_node::offset_debugを修正しました。

    2. xml_node::remove_attributeに、空の属性の検査を追加しました。

    3. node_piとnode_declarationのコピーを修正しました。

    4. constの整合性を修正しました。

  • 仕様の変更:

    1. xpath_node::select_nodes()と関連関数は、式の戻り値の型がノード集合以外の場合、アサーションではなく例外を送出するようになりました。

    2. xml_node::traverse()が、begin()とend()の両コールバックで深さを-1に設定するようになりました(以前はbegin()で0、end()で-1でした)。

    3. rawではないノード出力の場合、PCDATAに兄弟があれば、ノード内のPCDATAの後に改行を出力します。

    4. UTF8からwchar_tへの変換は、5バイトのUTF8に似たシーケンスを不正とみなすようになりました。

  • 新機能:

    1. インデックスによる反復処理向けに、xpath_node_set::operator[]を追加しました。

    2. xpath_query::return_type()を追加しました。

    3. メモリー管理関数の取得アクセサーを追加しました。

v0.42 2009-09-17

保守リリース。変更点:

  • 不具合の修正:

    1. 独自のメモリー確保関数を使う場合や、delete[] / freeに互換性がない場合の、解放を修正しました。

    2. 不正な問い合わせに対するXPathパーサーを修正しました(不正なXPath問い合わせは、必ずコンパイルに失敗するはずです)。

    3. find_child_by_attributeのconstの整合性を修正しました。

    4. 互換性を改善しました(各種警告を修正し、GCCの<cstring>インクルード依存を修正)。

    5. 空のノードに対して正しく動作するよう、イテレーターのbegin/endとprint関数を修正しました。

  • 新機能:

    1. クラス/関数の属性を制御する設定マクロPUGIXML_API/PUGIXML_CLASS/PUGIXML_FUNCTIONを追加しました。

    2. 各種型を受け取るxml_attribute::set_valueのオーバーロードを追加しました。

v0.41 2009-02-08

保守リリース。変更点:

  • 不具合の修正:

    1. ノードの出力の不具合を修正しました(一部の内容が出力ストリームへ書き込まれないことがありました)。

v0.4 2009-01-18

変更点:

  • 不具合の修正:

    1. 手動で寿命を管理するparse()のサンプル文書を修正しました。

    2. XPathの文書順の整列を修正しました(xpath_node_set::sortの後のノード順が不正となり、一部のXPath問い合わせの結果も不正となっていました)。

  • ノード出力の変更:

    1. ノード出力時に、一重引用符をエスケープしなくなりました。

    2. ノード出力時に、ASCII表の後半の記号をエスケープしなくなりました。このため、不要になったformat_utf8フラグを削除し、format_write_bomをformat_write_bom_utf8へ改名しました。

    3. ノード出力を改め、xml_writerインターフェースを通じて動作するようにしました。FILE*とstd::ostream向けの実装があります。副次的な効果として、xml_document::save_fileがSTLなしで動作するようになりました。

  • 新機能:

    1. 属性に符号なし整数への対応を追加しました(xml_attribute::as_uint、xml_attribute::operator=)。

    2. parse_declarationフラグを指定すると、文書宣言(<?xml …​?>)をnode_declaration型のノードとして解析するようになりました(encoding/versionには属性と同様にアクセスします。例:doc.child("xml").attribute("version").as_float())。対応するノード出力フラグも追加しました。

    3. 独自のメモリー管理への対応を追加しました(詳細はset_memory_management_functionsを参照)。

    4. ノード/属性のコピーを実装しました(詳細はxml_node::insert_copy_*とxml_node::append_copyを参照)。

    5. 一部の場合(COLLADAファイルなど)に解析コードを簡単にするfind_child_by_attributeとfind_child_by_attribute_wを追加しました。

    6. デバッグ用にファイルのオフセット情報を取得する機能を追加しました(解析済みファイル内の任意のxml_nodeの正確な位置を確認できます。詳細はxml_node::offset_debugを参照)。

    7. 解析のエラー処理を改善しました。load()、load_file()、parse()が、エラーコードと最後に解析した位置のオフセットを含むxml_parse_resultを返すようになりました。xml_parse_resultは暗黙にboolへ変換できるため、旧インターフェースを壊しません。

v0.34 2007-10-31

保守リリース。変更点:

  • 不具合の修正:

    1. テキストモードのiostreamから読み込む場合の不具合を修正しました。

    2. transfer_ownershipがtrueで解析に失敗する場合のリークを修正しました。

    3. 保存の不具合を修正しました(属性値の\rと\nをエスケープするようになりました)。

    4. free()をdestroy()へ改名しました。マクロとの衝突が報告されていたためです。

  • 新機能:

    1. 互換性を改善しました(Digital Mars C++、MSVC 6、CodeWarrior 8、PGI C++、Comeau、PS3、XBox360に対応)。

    2. 例外処理のないプラットフォーム向けに、PUGIXML_NO_EXCEPTIONフラグを追加しました。

v0.3 2007-02-21

リファクタリング、再設計、改善を行ったバージョンです。変更点:

  • インターフェース:

    1. XPathを追加しました。

    2. ツリーの変更関数を追加しました。

    3. STLなしのコンパイルモードを追加しました。

    4. 文書をファイルへ保存する機能を追加しました。

    5. 解析フラグをリファクタリングしました。

    6. xml_parserクラスを削除し、xml_documentを使うようにしました。

    7. 所有権を移譲する解析モードを追加しました。

    8. xml_tree_walkerの動作を変更しました。

    9. イテレーターが非constになりました。

  • 実装:

    1. 複数のコンパイラーとプラットフォームに対応しました。

    2. 解析の中核をリファクタリングし、高速化しました。

    3. 標準への準拠を改善しました。

    4. XPathの実装を追加しました。

    5. 複数の不具合を修正しました。

v0.2 2006-11-06

最初の公開リリースです。変更点:

  • 不具合の修正:

    1. 空のノードに対するchild_value()を修正しました。

    2. W4でのxml_parser_implの警告を修正しました。

  • 新機能:

    1. child_value(name)とchild_value_w(name)を導入しました。

    2. parse_eol_pcdataとparse_eol_attributeのフラグを導入し、parse_minimalを最適化しました。

    3. strconv_tを最適化しました。

v0.1 2006-07-15

テストを目的とした最初の非公開リリースです。