2013-03-05 1 views
3

J'ai chargé un document XML dans un XmlDocument. Le document est chargé par un XmlReader lié à un schéma donné (par la classe XmlReaderSettings).Récupère tous les attributs valides pour un élément XML donné

Comment puis-je obtenir une liste d'attributs autorisés pour un élément de noeud de document donné?

XML ressemble à ceci et a des attributs en option:

<row attribute1="1" attribute2="2" attribute3="something"> 
<row attribute1="3" attribute3="something"> 
<row attribute2="1" attribute3="something"> 

La liste doit contenir attribut1, attribut2, Attribute3

Merci

+0

Juste pour clarifier, vous avez quelques attributs que vous voulez lire et d'autres qui devraient être ignorés, n'est-ce pas? Quoi qu'il en soit, vous aurez besoin de [linq to xml] (http://msdn.microsoft.com/fr-fr/library/bb387098.aspx). – Leri

+1

@PLB Je suis frappé par Visual Studio 2005 et .NET Framework 2.0 – sblandin

Répondre

3

Je l'ai utilisé VS2010 mais Framework 2.0. puisque vous avez un schéma vous connaissez les noms des attributs, j'ai essayé avec votre échantillon XML juste créé une balise de base.

XML

<base> 
     <row attribute1="1" attribute2="2" attribute3="something"/> 
     <row attribute1="3" attribute3="something"/> 
     <row attribute2="1" attribute3="something"/> 
</base> 

CodeBehind

 XmlDocument xml = new XmlDocument(); 
     xml.Load(@"C:\test.xml"); 

     List<string> attributes = new List<string>(); 

     List<XmlNode> nodes = new List<XmlNode>(); 
     XmlNode node = xml.FirstChild; 
     foreach (XmlElement n in node.ChildNodes) 
     { 
      XmlAttributeCollection atributos = n.Attributes; 
      foreach (XmlAttribute at in atributos) 
      { 
       if(at.LocalName.Contains("attribute")) 
       { 
        attributes.Add(at.Value); 
       } 
      } 
     } 

Il donne une liste avec tous les attributs.

+0

Ainsi, vous suggérez essentiellement de faire défiler tous les éléments de ligne et de créer une collection d'attributs. La clause if ne devrait pas être: if (! At.LocalName.Contains ("attribute"))? – sblandin

+1

Bonjour. Vous voulez ou non les attributs qui contiennent "l'attribut"? Si vous n'avez pas LINQ, la seule façon que je puisse voir est de passer par tous les nœuds. –

Questions connexes