4

.dtd を介して xml ファイルを検証しようとしています。私はこのバリデータを書きました:

    public bool Validation(XmlDocument xmlDoc)
    {
        var xml = XmldocToString(xmlDoc);
        var r = new XmlTextReader(new StringReader(xml));
        var settings = new XmlReaderSettings();
        var sb = new StringBuilder();
        settings.ProhibitDtd = false;
        settings.ValidationType = ValidationType.DTD;
        settings.ValidationEventHandler += (a, e) =>
        {
            sb.AppendLine(e.Message);
            _isValid = false;
        };
        XmlReader validator = XmlReader.Create(r, settings);
        while (validator.Read())
        {
        }
        validator.Close();

        return _isValid;
    }

問題は、ソリューションの bin ディレクトリに dtd ファイルが必要なことです。.dtd ファイルを保存する別のディレクトリを選択したいのですが、方法がわかりません。

お時間をいただきありがとうございます。

4

1 に答える 1

2

Xml ファイルで DTD との関連付けを宣言します。

dtd がリモート サーバーに格納されている場合の例:

<!DOCTYPE Catalog PUBLIC "abc/Catalog" "http://xyz.abc.org/dtds/catalog.dtd">

Xml ファイルと DTD の関連付けに関する詳細なオプションと情報については、そのwiki ページそのサイトを参照してください。

dtd がローカル (SYSTEM) に配置されている場合の例:

ドキュメントから DTD を参照する方法:

ドキュメントの最上位要素がspecであり、dtd が、ドキュメントがロードされたディレクトリのサブディレクトリ dtds 内のファイル mydtd に配置されていると仮定します。

<!DOCTYPE spec SYSTEM "dtds/mydtd">

:

システム文字列は実際には URI リファレンス (RFC 2396 で定義) であるため、Web 上の DTD の場所を示す完全な URL 文字列を使用できます。他の人にドキュメントを検証してもらいたい場合、これは非常に良いことです。また、PUBLIC 識別子 (マジック ストリング) を関連付けて、クライアント側のカタログで DTD を検索できるようにすることもできます。Web 上で検索する必要はありません。DTD には一連の要素と属性の宣言が含まれていますが、それらはドキュメントのルートがどうあるべきかを定義していません。これは、DOCTYPE 宣言の最初の要素としてパーサー/バリデーターに明示的に通知されます。

(ここから抜粋)

于 2012-11-09T14:57:58.497 に答える