このページでは

QXmlStreamEntityResolver Class

QXmlStreamEntityResolver クラスは、QXmlStreamReader 用のエンティティリゾルバを提供します。詳細...

ヘッダー: #include <QXmlStreamEntityResolver>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注:このクラスのすべての関数は再入可能です。

パブリック関数

QXmlStreamEntityResolver()
virtual ~QXmlStreamEntityResolver()
virtual QString resolveUndeclaredEntity(const QString &name)

詳細な説明

QXmlStreamReader に対し、declared in the internal-set of the DTD ではないエンティティをどのように展開するかを指示するために使用します。

セキュリティ上の考慮事項

エンティティのサイクル

QXmlStreamReader はentities defined in the DTD 内のサイクルのみを検出して拒否し、QXmlStreamEntityResolverインターフェースの実装から展開されたエンティティ内のサイクルは検出しないため、エンティティの解決においてサイクルが生じないよう注意する必要があります。

これは設計上の仕様です。QXmlStreamReader は、具体的なQXmlStreamEntityResolverの実装に処理を委ねています。文字用のXMLエンティティ定義のような静的なマッピングの場合、これは当然保証されるため、バックグラウンドで追跡処理を実行すると、すべてのユーザーにとって処理速度が低下するだけです。

外部入力(信頼できないソースを含む)からエンティティ定義を読み込む場合、状況は興味深いものになります。この場合、実装側では、入力として使用する展開にサイクルが含まれていないことを保証する必要があります。これは単純なグラフ操作であり、線形時間・線形空間で実装可能で、読み込み時に事前に実行できるため、resolveUndeclaredEntity() のパフォーマンスには影響しません。

エンティティ展開の制限

現時点では、このクラスによって解決されたエンティティは、QXmlStreamReader::entityExpansionLimit() のカウント対象には含まれません。これは、Qt XMLの将来のバージョンで変更される可能性があります。

当面の間、外部入力からエンティティ定義を読み込む場合は、拡張の上限を独自に設定する必要があります。サイクル検出の後、最長経路の計算は単純なグラフ操作であり、線形時間・線形空間で実装可能で、読み込み時に前もって実行できるため、resolveUndeclaredEntity() のパフォーマンスにも影響しません。

QXmlStreamReader::setEntityResolver()も参照してください 。

メンバ関数のドキュメント

[constexpr noexcept default] QXmlStreamEntityResolver::QXmlStreamEntityResolver()

QXmlStreamEntityResolver のインスタンスをデフォルトコンストラクタで生成します。

[virtual noexcept] QXmlStreamEntityResolver::~QXmlStreamEntityResolver()

エンティティリゾルバーを破棄します。

[virtual] QString QXmlStreamEntityResolver::resolveUndeclaredEntity(const QString &name)

この関数を再実装して、宣言されていないエンティティ `name ` を解決し、その置換テキストを返してください。エンティティ解決関数がそのエンティティを認識しない場合は、null string`(QString() )を返してください。これにより、QXmlStreamreader でエラーが発生します。空の文字列(ただし null ではないもの)は、そのエンティティの有効な展開とみなされ、エラーは発生しません。

デフォルトの実装では、常にQString() を返します。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.