7

凝ったことはしたくありません。ドキュメントが有効であることを確認し、有効でない場合はエラー メッセージを表示したいだけです。Google は私にthisを指摘しましたが、XmlValidatingReader は廃止されたようです (少なくとも、MonoDevelop が教えてくれたことです)。

編集: Mehrdad のヒントを試していますが、問題があります。私はそれのほとんどを持っていると思いますが、OnValidationEvent がどこにも見つかりません。OnValidationEvent はどこから取得できますか?

XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new ValidationEventHandler(/*trouble is here*/);
XmlReader validatingReader = XmlReader.Create(fileToLoad, settings);
4

4 に答える 4

6

XmlValidatingReaderクラスを直接作成する代わりに、適切なXmlReaderSettingsオブジェクトを作成し、それを引数としてXmlReader.Createメソッドに渡す必要があります。

var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD };
settings.ValidationEventHandler += new ValidationEventHandler(OnValidationEvent);
var reader = XmlReader.Create("file.xml", settings);

残りは変更されていません。

PSOnValidationEventは、検証イベントを処理するために宣言するメソッドの名前です。明らかに、によって発生した検証イベントをサブスクライブしたくない場合は、行を削除できますXmlReader

于 2009-11-01T21:17:09.960 に答える
3
var messages = new StringBuilder();
var settings = new XmlReaderSettings { ValidationType = ValidationType.DTD };
settings.ValidationEventHandler += (sender, args) => messages.AppendLine(args.Message);
var reader = XmlReader.Create("file.xml", settings);

if (messages.Length > 0)
{
    // Log Validation Errors
    // Throw Exception
    // Etc.
}

ValidationEventHandler

ラムダ式

型推論

于 2009-11-01T21:38:48.047 に答える
-1

完全な説明:

  1. Visual Studio .NET で、という名前の新しい Visual C# コンソール アプリケーション プロジェクトを作成しますValidateXml。次のように、Class1.cs の先頭に 2 つの using ステートメントを追加します。

    using System.Xml;        // for XmlTextReader and XmlValidatingReader
    using System.Xml.Schema; // for XmlSchemaCollection (which is used later)
    
  2. で、次のように、メソッドの開始前に名前をClass1.cs付けたブール変数を宣言します。isValidMain

    private static bool isValid = true;      // If a validation error occurs,
                                             // set this flag to false in the
                                             // validation event handler. 
    
  3. メソッドでXmlTextReaderテキスト ファイルから XML ドキュメントを読み取るオブジェクトを作成し、この XML データを検証する を次のように作成します。MainXmlValidatingReader

    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");
    XmlValidatingReader v = new XmlValidatingReader(r);
    
  4. オブジェクトのValidationTypeプロパティは、XmlValidatingReader必要な検証のタイプ (DTD、XDR、またはスキーマ) を示します。次のように、このプロパティを DTD に設定します。

    v.ValidationType = ValidationType.DTD;
    
  5. 検証エラーが発生した場合、検証リーダーは検証イベントを生成します。次のコードを追加して、検証イベント ハンドラーを登録します (MyValidationEventHandler 手順 7 でメソッドを実装します)。

    v.ValidationEventHandler += 
       new ValidationEventHandler(MyValidationEventHandler);
    
  6. 次のコードを追加して、XML ドキュメントを読み取って検証します。検証エラーが発生した場合MyValidationEventHandlerは、エラーに対処するために呼び出されます。このメソッドはisValidfalse に設定します (手順 8 を参照)。検証後のステータスをisValid確認して、ドキュメントが有効か無効かを確認できます。

    while (v.Read())
    {
       // Can add code here to process the content.
    }
    v.Close();
    
    // Check whether the document is valid or invalid.
    if (isValid)
       Console.WriteLine("Document is valid");
    else
       Console.WriteLine("Document is invalid");
    
  7. MyValidationEventHandler次のように、メソッドの後にメソッドを記述Mainします。

    public static void MyValidationEventHandler(object sender, 
                                                ValidationEventArgs args) 
    {
       isValid = false;
       Console.WriteLine("Validation event\n" + args.Message);
    }
    

アプリケーションをビルドして実行します。アプリケーションは、XML ドキュメントが有効であることを報告する必要があります。 例: Visual Studio .NET では、ProductWithDTD.xml無効にするように変更します (たとえば、<AuthorName>M soliman</AuthorName>要素を削除します)。アプリケーションを再度実行します。次のエラー メッセージが表示されます。

Validation event
Element 'Product' has invalid content. Expected 'ProductName'.
An error occurred at file:///C:/MyFolder/ProductWithDTD.xml(4, 5).
Document is invalid
于 2013-05-26T08:53:30.997 に答える