2010-01-28 7 views
3

J'ai le code XML suivant. Étant donné le nom de la classe, j'ai besoin d'obtenir le code couleur correspondant. Comment puis-je accomplir cela en C#? Autrement dit, je dois arriver à un nœud spécifique, compte tenu du texte de son nœud précédent. Merci beaucoupComment obtenir le prochain texte d'un nœud XML, avec C#?

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 
<?xml-stylesheet type='text/xsl' href='template.xslt'?> 
<skin name="GHV--bordeaux"> 
    <color> 
    <classname>.depth1</classname> 
    <colorcode>#413686</colorcode> 
    </color> 
    <color> 
    <classname>.depth2</classname> 
    <colorcode>#8176c6</colorcode> 
    </color>... 

Répondre

8

Chargez votre xml dans un XmlDocument puis faire:

document.SelectSingleNode("/skin/color[classname='.depth1']/colorcode").InnerText 
0

XPath serait utile ... // peau/couleur [classname = » .depth1' ]/colorcode renverra # 413686. Chargez votre fichier XML dans un XmlDocument. Ensuite, utilisez la méthode .SelectSingleNode et utilisez Xpath, en changeant le nom de la classe si nécessaire.

5

Avec votre xml chargé dans un document.

var color = document.CreateNavigator().Evaluate("string(/skin/color/classname[. = '.depth']/following-sibling::colorcode[1])") as string; 

Ceci renverra un de vos codes de couleurs, ou une chaîne vide.
Comme le note @Dolphin, l'utilisation de following-sibling signifie que je suppose le même élément que dans l'exemple original.

Ma version LINQ semble un peu plus bavard:

var classname = ".depth1"; 
var colorcode = ""; 

XElement doc = XElement.Parse(xml); 

var code = from color in doc.Descendants("color") 
    where classname == (string) color.Element("classname") 
    select color.Element("colorcode"); 

if (code.Count() != 0) { 
    colorcode = code.First().Value; 
} 
+0

Cela échouera si l'ordre de classname/Colorcode ne sont pas toujours les mêmes que dans l'exemple. – Dolphin

Questions connexes