私はこのようなものを持っています:
uses MSXML2_TLB;
type TDocumentType = (dtOrder, dtInvoice, dtStatus, dtError); // And a few more, actually
function DetermineDocumentType(doc: IXMLDOMDocument2): TDocumentType;
...
doc パラメーターに含まれる XML の種類を判別するという単純なことを行う必要があります。<Order>...</Order>
XML は次のようになり<Invoice>...</Invoice>
ます<Status>...</Status>
。<Error>...</Error>
または、他の何か。これらのファイルの内部構造は非常に似ているため、XML から最初のタグ名を取得することによってファイルの種類を特定する唯一の信頼できる方法です。Doc.nodeName と Doc.baseName は機能しません。XML をテキストとして読み取り、それをコードで解析してタグ名を判別することもできますが、これは私が使用することを拒否する汚いトリックです。したがって、IXMLDOMDocument2 インターフェイスの適切なメソッドを介してタグ名を返すメソッドが必要です。さらに悪いことに、この関数の外側のコードを制御することはできず、2 つ目の制限として、このルート タグはたまたま大文字と小文字が区別されず、selectNode() を使用するようなトリックが機能しなくなります。これは、以前の開発者によって過去に下されたレガシー コードと不適切な決定が原因で、たまたま問題になります。(幸いなことに、このプロジェクトではルート タグだけがこのように奇妙に思えます。) ところで、この関数は、TheDailyWTF サイトでうまく機能する同様の関数を置き換えるものです。以前は、インターフェイスから XML を読み取り、それを完全に大文字に変換し、最後に多数の pos() 関数呼び出しを実行して、可能なタグをチェックしていました。特にこのコードは数千の XML ファイルを処理する必要があるため、あまり効率的ではありません...
では、IXMLDOMDocument2 型のオブジェクトのルート要素のタグ名を取得するにはどうすればよいでしょうか。