私はRAD Studio XE7で作業しています。私が作成していDelphiのパッケージでは、私は以下のSVGデータを含むXMLを解析する必要があります。Delphi - パッケージ、XML解析、DTD
uses ..., Xml.XMLIntf, Xml.XMLDoc, Xml.Win.msxmldom, ...
var
pDocument: IXMLDocument;
...
begin
...
// load file
pDocument := LoadXMLDocument(fileName);
...
end;
:私のパッケージで
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="141.73px" height="141.73px" viewBox="0 0 141.73 141.73" enable-background="new 0 0 141.73 141.73" xml:space="preserve">
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="67.6445" y1="90.6875" x2="99.4551" y2="90.6875">
<stop offset="0" style="stop-color:#26B5E3"/>
<stop offset="0.4887" style="stop-color:#3FBEED;stop-opacity:0.5113"/>
<stop offset="1" style="stop-color:#47C1F1;stop-opacity:0"/>
</linearGradient>
<path fill="url(#SVGID_1_)" d="M94.25,82.792l5.205-4.868c-3.235,14.581-16.266,25.527-31.811,25.527v-9.033c10.257,0,19.001-6.592,22.22-15.765L94.25,82.792z"/>
<path fill="#26B5E3" d="M99.479,63.931C96.303,49.282,83.23,38.279,67.645,38.279c-17.966,0-32.589,14.616-32.589,32.582c0,17.967,14.624,32.59,32.589,32.59v-9.033c-12.99,0-23.557-10.566-23.557-23.557c0-12.982,10.567-23.55,23.557-23.55c10.567,0,19.534,7.004,22.507,16.604l-15.937-0.042l10.017,9.46l5.633,5.32l4.386,4.139l5.205-4.868l4.854-4.549l10.065-9.411L99.479,63.931z"/>
</svg>
、私は、XML文書を読み取るために、次のコードを使用します私はエラーを取得するXMLでこの行でしかし
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
:このコードは、XMLは次の行が含まれていないながら、うまく機能
「をDTDが禁止されています」私は、このエラーがよく知られており、次の行を追加しても問題が解決しなければならないことを知っている:
Xml.Win.msxmldom.MSXMLDOMDocumentFactory.AddDOMProperty('ProhibitDTD', False);
そして、それはケースません:エラーが何より生成されたXMLがロードされている間。私のパッケージコードでAddDOMProperty( 'ProhibitDTD'、False)をコメントすると、この奇妙な動作は起こりません。ソースXMLでDTDを含む行を手作業で削除した場合。また、AddDOMProperty( 'ProhibitDTD'、False)コードを使用する場合でも、パッケージの代わりにexeファイル内でコンパイルされた同じコードがうまく機能します。
だから私の質問は以下のとおりです。
- 私が間違ってやっていますか?私のパッケージコードの中でAddDOMProperty( 'ProhibitDTD'、False)を有効にするとXML文書が完全に壊れてしまうのはなぜですか?
- パッケージ内で実行されるコードで「DTDが禁止されています」という問題を解決する正しい方法は何ですか? (してください例付き)
よろしく
XMLを事前処理してdoctypeを削除し、有効なxmlプロローグを追加しますか? – whosrdaddy
whorsdaddy、あなたの答えに感謝します。私はすでにこのオプションを検討していましたが、私が直面する問題はより深刻な問題の信号かもしれないので、最初に適用されます。2番目は問題を無視すると考えています。わたしの道。そのためには、回避策を適用する前にここで何が起こるのかを理解することをお勧めします。 –