2010-01-09 5 views
0

Tout le monde sait pourquoi cette expression XPath "catzero/@id" ne fonctionne pas sur ce xmlProblème de lecture XElement Attribut

document = XDocument.Load("file.xml"); 
var product = document.XPathSelectElements("//product", nameSpaceResolver).First(); 
var category = ((IEnumerable) product.XPathEvaluate("catzero/@id")).Cast<XAttribute>().first().value; //catezero/@id is null 
+0

Veuillez donner quelques exemples de code et expliquer ce qui se passe - "ne fonctionne pas" n'est pas très descriptif. –

+1

très bien .. – h3n

Répondre

1

XPath et LINQ à XML (XEelement) ne correspondent généralement pas - LINQ à XML utilise sa propre approche pour parcourir les documents XML.

Dans votre cas, vous seriez en mesure de faire quelque chose comme:

XDocument doc = XDocument.Load("http://www.quillarts.com/Test/Feed2.xml"); 

foreach(XElement xe in doc.Descendants("product")) 
{ 
    if(xe.Element("catzero") != null) 
    { 
     var attr = xe.Element("catzero").Attribute("id"); 

     if(attr != null && attr.Value == "20") 
     { 
      string elementValue = xe.Value; 
     } 
    } 
} 

Je ne sais pas de votre question ce que vous voulez faire avec ces éléments et/ou attributs - juste aller de l'avant et fais ce que tu as besoin de faire.

1

il écriture comme:

var product = document.XPathSelectElements("//product", nameSpaceResolver).First(); 
IEnumerable at = (IEnumerable)product.XPathEvaluate("catzero/@id"); 
var category = at.Cast<XAttribute>().First<XAttribute>().Value; 

fonctionne bien pour moi si vous attendez la valeur de catégorie à 20.

1

Il fonctionne bien pour moi (fixation du F dans First(), le V en Value et en passant un null namespace-resolver), donnant la catégorie "20". Attendez-vous quelque chose de différent? Si oui, quoi et pourquoi?

De même:

string category = document.Descendants("product").First() 
      .Elements("catzero").Attributes("id").First().Value; 

donne "20".