Frage

Jeder weiß, warum diese XPath-Ausdruck "catzero/@id" ist nicht in diesem Arbeits 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
War es hilfreich?

Lösung

betreten Sie XPath-Ausdruck in XElement ()?
So verwenden Sie Xpath sollten Sie versuchen, http: // msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx

Andere Tipps

XPath und Linq-to-XML (XEelement) nicht mit der Regel - Linq-to-XML-Anwendungen eines eigener Ansatz ist XML-Dokumente durchlaufen

.

In Ihrem Fall würde Sie in der Lage sein, etwas zu tun:

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;
        }
    }
}

Ich weiß nicht, aus Ihrer Frage, was man mit diesen Elementen tun möchten und / oder Attribute -. Gehen Sie einfach weiter und tun, was Sie tun müssen, um

Das Schreiben als:

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

Arbeiten für mich in Ordnung, wenn Sie den Wert der Kategorie erwarten 20 zu sein.

Es funktioniert gut für mich (die F in First() Festsetzung der V in Value, und Leiten eines null Namespace-Resolver), so dass die Kategorie "20". Haben Sie etwas anderes erwarten? Wenn ja, was und warum?

Ebenso:

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

gibt "20".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top