Question

Tout le monde sait pourquoi cette expression XPath "catzero/@id" ne fonctionne pas sur ce xml

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
Était-ce utile?

La solution

Saisissez-vous l'expression XPath dans XElement ()?
Pour utiliser XPath vous devriez essayer http: // msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx

Autres conseils

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 -. Allez-y et faites tout ce que vous devez faire

L'é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 très bien pour moi si vous attendez la valeur de la catégorie à être 20.

Il fonctionne bien pour moi (fixation du F dans First(), le V en Value, et le passage d'un espace de noms null-resolver), donnant la catégorie « 20 ». Vous 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".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top