2010-11-02 15 views
0

J'ai rencontré un problème d'analyse XML dans .Net où je dois être capable de détecter la forme d'élément vide que j'ai mais que je n'arrive pas à obtenir pour fonctionner correctement. Essentiellement dans le format XML j'analyse les deux fragments suivants devraient analyser différemment:Détection de deux formes d'éléments vides en XML en utilisant .Net

<sometag /> 

et

<sometag></sometag> 

Mon problème est que .Net ne semble pas me fournir des moyens pour déterminer la différent entre ce qui précède.

utilisant DOM basé l'analyse du XmlNode rapportera « « » » pour les deux InnerText et InnerXml et la propriété OuterXml à la deuxième se développe sous forme quel que soit le XML d'entrée, donc pas moyen de détecter sur cette base.

En utilisant XmlReader analyse syntaxique à base des deux formulaires de rapport IsEmptyElement d'être true et je ne peux pas voir d'autres propriétés de toute utilisation à détecter.

Quelqu'un sait de toute façon de détecter ce pour DOM analyse syntaxique basé

Répondre

1

Dans le premier cas IsEmptyElement retours true lorsque vous êtes à l'élément de départ et dans le second cas, il retourne false:

while (reader.Read()) 
{ 
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "sometag") 
    { 
     // prints true if <sometag/> and false if <sometag></sometag> 
     Console.WriteLine(reader.IsEmptyElement); 
    } 
} 
+0

Corrigé ma question, vous avez raison que cela rapporte correctement pour l'analyse syntaxique basée sur 'XmlReader', serait toujours agréable d'être capable de détecter la même chose pour l'analyse syntaxique DOM – RobV

+0

Pardonnez mon ignorance mais qu'est-ce que l'analyse syntaxique * DOM? –

+0

Document Object Model = DOM. Si vous utilisez la classe 'XmlDocument', .Net transformera le document XML entier en une arborescence d'objets qui, selon votre format XML, facilitera l'analyse puisque vous pouvez vous déplacer librement dans les données plutôt que de les transférer uniquement. L'inconvénient est qu'il nécessite beaucoup plus de mémoire que l'analyse XmlReader, surtout si vous avez de gros fichiers XML – RobV