2

何らかの理由で 256 を超える深さのネストされた要素を持つ SVG ファイルがあり、MSXML の MaxElementDepth 制約 (デフォルトは 256) に違反しているため、Delphi が SVG ファイルをロードできません。

SVGファイルを読み込めるように、実行中のプログラム内からMSXMLのMaxElementDepth値を高く設定する方法を知っている人はいますか?

プロパティを設定するためのメソッド (setProperty) を持つ代替の CoDOMDocument40 を試しましたが、MaxElementDepth を設定しようとすると無効なプロパティ名が報告されます。

私が考えることができる他の代替手段は、コマンドラインツールを実行して階層をフラットにすることですが、私はむしろこの方法には行きたくありません...

あなたの助けに感謝します:-)

4

2 に答える 2

3

CoDOMDocument60代わりに使用する必要があるようですCoDOMDocument40

MaxElementDepth プロパティ

このプロパティは、MSXML 3.0 および 6.0 でサポートされています。3.0 のデフォルト値は 0 です。6.0 のデフォルト値は 256 です。

于 2012-11-26T16:25:54.863 に答える
2

XE2 では、カスタム関数を実装し、それをユニットのグローバルMSXMLDOMDocumentCreate変数に割り当てます。Xml.Win.msxmldom

uses
  ..., Xml.Win.msxmldom;

function MyCreateDOMDocument: IXMLDOMDocument;
begin
  Result := CreateDOMDocument;
  //...
end;

initialization
  MSXMLDOMDocumentCreate := MyCreateDOMDocument;

XE3 では、新しいクラスを派生させてTMSXMLDOMDocumentFactoryその仮想メソッドをオーバーライドし、カスタム クラスをユニット内CreateDOMDocument()のグローバルTMSXMLDOMDocumentFactoryClass変数に割り当てます。Xml.Win.msxmldom

uses
  ..., Xml.Win.msxmldom;

type
  MyFactory = class(TMSXMLDOMDocumentFactory)
  public
    class function CreateDOMDocument: IXMLDOMDocument; override;
  end;

class function MyFactory.CreateDOMDocument: IXMLDOMDocument;
begin
  Result := inherited CreateDOMDocument;
  //...
end;

initialization
  TMSXMLDOMDocumentFactoryClass := MyFactory;

いずれの場合も、 にアクセスすると、IXMLDOMDocument必要に応じてそのプロパティと設定をカスタマイズできます。

于 2012-11-26T21:46:52.210 に答える