2010-03-05 3 views
1

J'essaie d'obtenir la valeur de comp1 de la manière la plus simple en C#. Je veux être en mesure de le faire avec une manière qui nécessite moins si un élément contrôlées après comme primaire est là, etc.Comment obtenir directement une valeur d'un XML (de préférence en utilisant XPath)?

-à-dire

// pseudo code 
xmlItem = root.SelectSingleNode "/Primary/Complex?Name='comp1'" 

Je peux donc simplement vérifier si xmlItem est null, ou n'a pas éléments, au lieu de faire de nombreuses vérifications chaque fois que j'accède à un nœud enfant. Voici le fichier XML, mais le fichier réel est plus imbriqué, mais seul le noeud feuille xml a un nom spécifique que nous recherchons.

<?xml version="1.0" ?> 
<Primary Type=""> 
    <Simple Name="smp"></Simple> 
    <Complex Name="comp0" Value="123"></Complex> 
    <Complex Name="comp1" Value="456"></Complex> 
    <Complex Name="comp2" Value="789"></Complex> 
</Primary> 
+0

IMHO C# + XML + meilleures pratiques = LINQ to XML (au moins 3,5), et non XPath. Découvrez XElement et XDocument dans System.Xml.Linq. – TrueWill

Répondre

3
var xmlItem = root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value"); 
2

Essayez

root.SelectSingleNode("/Primary/Complex[@Name='comp1']/@Value"); 
5

Je pense que le XPath est /Primary/Complex[@Name='comp0']/@Value

Par ailleurs, votre XML est erroné. Pas de balise de fermeture pour Simple, pas de balise d'ouverture pour le matériau. J'ai supposé </Material> devrait être </Simple>.

+0

Oui, c'est mon erreur. –

0

Vous allez vouloir utiliser XPathDocument et XPathNavigator à partir de l'espace de noms System.Xml.XPath.

XPathDocument fileToParse = new XPathDocument(FullPathToFile); 
XPathNavigator fileNavigator = fileToParse.CreateNavigator(); 
XPathNavigator selected = fileNavigator.SelectSingleNode("./Primary/Complex[@Name='comp1']/@Value"); 
//selected will be null if your XPath doesn't select anything... 
if(selected != null){ Console.WriteLine(selected.Value); } 
Questions connexes