Je ne veux rien faire de fantaisie, je veux juste m'assurer qu'un document est valide et imprimer un message d'erreur si ce n'est pas le cas. Google m'a signalé à This , mais il semble que xmlvalidingreader est obsolète (au moins, c'est ce que le monodevelop raconte Moi).
Edit: J'essaie le conseil de Mehrdad, mais j'ai des problèmes. Je pense avoir le plus de cela, mais je ne trouve que survalidationeventer n'importe où. Où aller je reçois onvalidationation of? P>
4 Réponses :
au lieu de créer Le reste est inchangé. P> ps xmlvaliditingReader code> classe
directement, vous devez construire un xmlreadersettings CODE> Objet
et transmettez-le comme une dispute sur Xmlreader.create code> méthode
: OnvalidationEvent Code> est le nom de la méthode que vous déclarez à gérer les événements de validation. Évidemment, vous pouvez supprimer la ligne si vous ne souhaitez pas vous abonner à des événements de validation soulevés par le
xmlreader code>. P> p>
Matthew: C'est la méthode que vous déclareriez à gérer les événements de validation échoués. Vous pouvez supprimer cette ligne si vous voulez que cela jette une exception à la place.
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. } ValidationEventHandlerLambda ExpressionsType Inference
Euh, je n'ai pas donné à la même réponse de Mehrdad, 22 minutes avant de le faire?
Cette réponse est une manière différente d'accomplir la même chose.
description complète:
Dans Visual Studio .NET, créez un nouveau Visual C # Application console
projet nommé Dans Créer un Si des erreurs de validation se produisent, le lecteur de validation génère un
événement de validation. Ajoutez le code suivant pour enregistrer une validation
gestionnaire d'événements (vous mettre en œuvre le Ajoutez le code suivant pour lire et valider le document XML. Si seulement
des erreurs de validation se produisent, Ecrire la méthode ValidateXml code>. Ajouter deux déclarations en utilisant au début
de Class1.cs suit comme: p>
Validation event
Element 'Product' has invalid content. Expected 'ProductName'.
An error occurred at file:///C:/MyFolder/ProductWithDTD.xml(4, 5).
Document is invalid
Class1.cs code>, déclarer une variable booléenne nommée
isValid code> avant la
début de la méthode
principal code> comme suit: p>
public static void MyValidationEventHandler(object sender,
ValidationEventArgs args)
{
isValid = false;
Console.WriteLine("Validation event\n" + args.Message);
}
XmlTextReader code> pour lire un document XML à partir d'un texte
fichier dans le
principal code>, puis créer un
XmlValidatingReader code>
valider ces données XML comme suit: p>
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");
ValidationType code> de
XmlValidatingReader code>
indique le type de validation qui est nécessaire (DTD, XDR, ou
Schéma). Définissez cette propriété sur DTD comme suit: p>
v.ValidationEventHandler +=
new ValidationEventHandler(MyValidationEventHandler);
MyValidationEventHandler code>
Procédé à l'étape 7): p>
v.ValidationType = ValidationType.DTD;
MyValidationEventHandler code> est appelé à
l'erreur est corrigée. Ceci définit la méthode
isValid code> false (voir l'étape 8).
Vous pouvez vérifier l'état de
isValid code> après validation pour voir si le
document est valide ou non valide. p>
XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");
XmlValidatingReader v = new XmlValidatingReader(r);
MyValidationEventHandler code> après la balise
principal code> Méthode
suit: p>
private static bool isValid = true; // If a validation error occurs,
// set this flag to false in the
// validation event handler.
MEH - Ceci est juste une copie / pâte de certains échantillons de MSDN, près de Verbatim. À tout le moins, fournissez une référence: support.microsoft.com/kb/307379
J'ai mentionné cet exemple sur la validation DTD. https: // docs.microsoft.com/en-us/dotnet/api/system.xml.xmlreadersettings.viewprocessing?view=netcore-3.1#input
Cet exemple a invalide DTD XML, que j'ai corrigé comme ci-dessous . P>
<!--XML file using a DTD--> <!DOCTYPE store [ <!ELEMENT store (item)*> <!ELEMENT item (name,dept,price)> <!ATTLIST item type CDATA #REQUIRED ISBN CDATA #REQUIRED> <!ELEMENT name (#PCDATA)> <!ELEMENT dept (#PCDATA)> <!ELEMENT price (#PCDATA)>]> <store> <item type="supplies" ISBN="2-3631-4"> <name>paint</name> <dept>1</dept> <price>16.95</price> </item> </store>
Au fait, qu'entendez-vous par «conversion de C #». Mon code est i> en C # 3.0.
@Mehrdad: Désolé, j'ai écrit que pendant que j'apprendais toujours C # 1.0, et je ne savais pas que
var code> était valide en C #.