2010-08-10 7 views
0

J'utilise la structure XML suivantComment récupérer dynamiquement toutes les valeurs possibles des attributs (attributs variables) de l'un des nœuds xml?

<SERVERS> 
<SERVER NAME="A1" ID="1"></SERVER> 
<SERVER NAME="A2"></SERVER> 
<SERVER NAME="A3" ID="3" Parent="XYZ"></SERVER> 
<SERVER NAME="A4" ID="4"></SERVER> 
<SERVER NAME="A5" Parent="abc" value="10"></SERVER> 
<SERVER NAME="A6"></SERVER> 
</SERVERS> 

J'accède ce fichier xml en utilisant LINQ to XML en asp.net en utilisant C#. Je suis capable d'accéder à tous les attributs d'un nœud XML en spécifiant explicitement le nom de l'attribut. Je veux écrire une requête sur ce fichier xml qui lit toutes les valeurs d'attribut du nœud xml (Dans notre exemple, le nœud est SERVER) signifie dynamiquement que je veux écrire la requête qui peut lire la valeur de l'attribut Nom & ID from premier noeud, seul nom de la deuxième ligne, Nom, ID & Parent de la troisième ligne, Nom & ID de la quatrième ligne, Nom, Parent & Valeur de la cinquième ligne & uniquement Nom de la sixième rangée sans modification du code existant à chaque fois . Une fois que j'ajoute un attribut (par exemple si j'ajoute l'identifiant d'attribut dans la sixième ligne) dans le fichier xml ci-dessus, je n'ai pas besoin de modifier ma requête LINQ to XML. Ma requête doit récupérer dynamiquement le nombre total d'attributs & afficher leurs valeurs. Est-ce que c'est leur moyen de le faire? Pouvez-vous me fournir le code ou le lien par lequel je peux résoudre le problème ci-dessus?

Répondre

0

Le code ci-dessous affichera tous les attributs d'un élément.

XDocument doc = XDocument.Load("file.xml"); 
foreach(var element in doc.Element("SERVER").Elements()) { 
    System.Diagnostics.Debug.WriteLine("Node " + element.Name.LocalName + ":"); 
    foreach(var attribute in element.Attributes()) { 
    System.Diagnostics.Debug.WriteLine(" " + attribute.Name.LocalName + ": " + attribute.Value); 
    } 
} 

Pour ce XML:

<SERVER> 
<ServerInstance ID="101" Name="Server1"> 
<ServerInstance ID="102" Name="Server2"> 
<SERVER> 

Il imprimera quelque chose comme ceci:

Node ServerInstance: 
    ID: 101 
    Name: Server1 
Node ServerInstance: 
    ID: 102 
    Name: Server2 
0

Si vous utilisez simplement XElement.Attributes(), vous aurez tous les attributs pour un élément particulier - vous pouvez les parcourir de manière appropriée.

Exemple de code:

using System; 
using System.Xml.Linq; 

class Test 
{ 
    static void Main() 
    { 
     string xml = "<element attr1='Hello' attr2='there' />"; 
     XElement element = XElement.Parse(xml); 
     foreach (XAttribute attr in element.Attributes()) 
     { 
      Console.WriteLine("{0}={1}", attr.Name, attr.Value); 
     } 
    } 
} 

Sortie:

attr1=Hello 
attr2=there 

donc il vous suffit de boucle à travers tous les éléments qui vous intéressent, et la boucle à travers les attributs de chaque élément, afficher tout tu dois.

Questions connexes