8
votes

Comment puis-je forcer la conformité à un schéma donné à .NET?

Disons que j'ai un schéma avec lequel je veux un document d'entrée se conformer. Je charge le fichier en fonction du schéma comme celui-ci:

<badDoc xmlns="http://Foo/Bar/Bax">
  This is not a valid document; but Schema doesn't catch it
  because of that xmlns in the badDoc element.
</badDoc>


0 commentaires

3 Réponses :


-1
votes

1 commentaires

Ça n'a pas marché. laisse encore le passage du document non valide. Mise à jour le code exemple en conséquence.



2
votes

aussi stupide qu'il y paraît, la chose que vous souhaitez regarder est en fait sur le xmlreadersettings objet: xxx


6 commentaires

@CODAIZEN - HAH, assez équitable, c'est un exemple "meilleur", bien que j'aime bien l'étonnement implicite de mon original :)


D'accord, mais il peut y avoir une raison quelconque (par exemple ne pas bousiller l'ensemble de la pile et l'état d'analyse syntaxique) pour, cependant, car il est peu étonnant non, je l'espère l'épithète « stupide » prendra toute la responsabilité de mettre en évidence cette torsion.


@codaizen qui est extrêmement diplomatique de vous; Respect réalisé. :)


Cela semble toujours laisser passer le document invalide. Mais au moins, il y a une notification. Malheureusement, cela provoque l'échec des cas valables; Par exemple, l'espace de noms XML est défini implicitement dans XML, de sorte que toute utilisation valide de xml: espace dans la validation de l'échec du document de cette façon.


@ Billy-oneal Oh, il y a un autre drapeau sur les endroits où vous pouvez lui dire d'ignorer certains espaces de noms - quand je reviens à mon bureau, je vais chercher.


@Billyonéal Hey, essayez d'ajouter cela? validationflags = xmlschemavalidationflags.reportvalidationwarnings | Xmlschemavalidationflags.allowxmlattributes



1
votes

La solution que j'ai fini par s'installer est de vérifier essentiellement que le nœud racine est dans l'espace de noms que j'attends. Si ce n'est pas le cas, je traite donc de la même manière que je traite une défaillance de la validation de schéma véritable:

// Parse the bits we need out of that file
var rootNode = inputDoc.Root;
if (!rootNode.Name.NamespaceName.Equals(string.Empty, StringComparison.Ordinal))
{
    throw new InvalidDataException(".abc file format namespace did not match.");
}


0 commentaires