web-dev-qa-db-ja.com

MSXMLのどのバージョンを使用する必要がありますか?

これはよくある質問のようですが、SOでは見つかりませんでした。

アプリケーションで使用する必要があるMSXMLのバージョン、さらに重要なのはどのように決定すればよいですか?

MSXML3、4、5、6があります。

最近、MSXML v4を使用するいくつかのコードを calling-wcf-service-by-vbscript に投稿しました。 AnthonyWJonesは、私は4ではなく3または6を使用するべきではなく、おそらく3を使用すべきだと投稿しました。確かにv5ではありません!

どうして?アプリで使用するMSXMLのバージョンを選択するための基準について詳しく知りたいのですが。

ボーナス質問:誰かが時間の経過とともにMSXMLのさまざまなバージョン間の違いの概要を持っていますか?


これまでの要約:

  • MSXML6
    最初の選択肢でなければなりません。 2006年にリリースされ、パフォーマンスとコンプライアンスの修正が含まれています。可能であればこれを使用してください。それは良いです。マージモジュールはありません。 MSXML6ランタイムをアプリにバンドルするには、 MSはMSXML6 msiファイルのパッケージ化を提案しています 。 MSXML6はMSXML3/4からのアップグレードですが、一部の機能が廃止されているため、MSXML6に置き換わるものではありません。 MSI here を取得できます。
  • MSXML3
    第二希望。最も広く展開されているバージョン。当初は2000年3月に出荷されました。アクティブに維持され、新機能はありません。 SP5 (2005年に出荷)以降の場合、現在サポートされています。 SP7 は現在のものです(同じく2005年から)。
  • MSXML5
    は、MS-Officeの一部としてのみリリースされました。現在Microsoftでサポートされていますが、Officeの一部としてのみで、アプリのビルド用ではありません。 MSXML5に依存するアプリを作成しないでください:Verboten。
  • MSXML4
    最初に発送されましたか?現在「メンテナンスモード」です。マイクロソフトは、MSXML4からMSXML6に移行することを人々に奨励しています。 2003年に出荷されたMSXML4SP2以降を使用している場合は、現在サポートされています。MSXML4SP2をダウンロードしてください ここ再配布可能

Internet Explorerで適切なバージョンのMSXMLを使用するMicrosoftのxmlteamからのブログ の良いエントリーです。

45
Cheeso

Win2kより前のWindows OSバージョンをサポートする必要がある場合は、MSXML3を使用してください。それ以外の場合は、MSXML6を使用します。

MSXML4はメンテナンスモードです。
MSXML5は、MS-Office外での使用が実際にサポートされることはありませんでした。

見る:

23
Shog9

数年前の仕事でも同じ決断をしなければなりませんでした。

MSDNの状態 バージョン6が最適です。ただし、SDKにはマージモジュールがなく、バージョン4とは異なり、アプリケーションに配布することはできません。バージョン4はバージョン6に置き換えられ、バージョン5は特にMS Office用でした。古いマシンでは、バージョン3がターゲットバージョンのままです。

私がやったことは、優雅な低下アプローチをとり、最初に6を使用しようとし、そのバージョン4に失敗し、次にそのバージョン3に失敗しました(コードはC++):

inline bool CXMLDocument::CreateXMLDOMFactory(void)
{
    wxMutexLocker lock(sm_mXMLDOMFactory);

    if(!sm_pXMLDOMFactory)
    {
        ::CoGetClassObject(CLSID_DOMDocument60, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
        if(!sm_pXMLDOMFactory)
        {
            ::CoGetClassObject(CLSID_DOMDocument40, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
            if(!sm_pXMLDOMFactory)
                ::CoGetClassObject(CLSID_DOMDocument30, CLSCTX_ALL, 0, IID_IClassFactory, reinterpret_cast<void **>(&sm_pXMLDOMFactory));
        }
    }

    return sm_pXMLDOMFactory != 0;
}

バージョン4からバージョン6に移行した後、測定可能なパフォーマンスの向上に気づきましたが、この利点を得るためにドキュメントでNewParserプロパティを明示的に設定する必要があります。例:

pDocument->setProperty(_bstr_t(L"NewParser"), VARIANT_TRUE);

また、セキュリティの考慮事項、リモートDTDなどのために、ドキュメントをロードするときにジャンプする必要があるいくつかのフープもありました。繰り返しますが、これはドキュメントのプロパティを介して行われたため、MSDNでProhibitDTDUseInlineSchemaAllowXsltScriptおよびServerHTTPRequestプロパティを調べて、それらがあなたの使用法に当てはまるかどうかを確認してください。

12
Phil Booth

ここにすべてのバージョンのリストがありますWikipediaの違い についての適切な議論があります。

2
JP Alioto

MSXML 5は、XMLにデジタル署名できる唯一のバージョンのようです。 MSサイトによると、MSXML 6でも実行できないため、この機能が必要な場合は、MSXML 5が唯一の方法であるようです。

http://msdn.Microsoft.com/en-us/library/ms761363(VS.85).aspx "このサンプルコードは、Microsoft Officeアプリケーション用にMSXML 5.0で実装された機能を使用します。XMLデジタル署名はMXSML 6.0以降ではサポートされていません "

1
WarmBooter

私は最近、最新バージョンから最も古いバージョンに優雅に分解しようとするJSライブラリを作成しました。 MSXML 3.0はほとんどのシステムで非常によくサポートされていることがわかりました。可能な場合はv。6.0を使用したかったが、一部のIE 8インストールで失敗しました。そのため、コードを変更して、最初にv 3.0、次にv 6.0、次にv 2.0を試す必要がありました。 。

0
Cerebrus