سؤال

أي شخص يعرف لماذا هذا التعبير XPath "catzero/@id" لا يعمل على هذا 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
هل كانت مفيدة؟

المحلول

هل تدخل تعبير XPath في Xelement ()؟
لاستخدام XPath يجب أن تحاول http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx.

نصائح أخرى

XPath و LINQ-TO-XML (Xeelement) لا تتطابق عادة - يستخدم LINQ-TO-XML نهجها الخاص ل Traversing مستندات XML.

في حالتك، ستكون قادرا على فعل شيء مثل:

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

لا أعرف من سؤالك ما تريد القيام به مع هذه العناصر و / أو السمات - فقط المضي قدما والقيام بكل ما تحتاج إلى القيام به.

كتابته على النحو التالي:

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

يعمل بشكل جيد بالنسبة لي إذا كنت تتوقع أن تكون قيمة الفئة 20.

إنه يعمل بشكل جيد بالنسبة لي (تحديد F في First(), ، ال V في Value, ، ويمر null اسم الاسم)، وإعطاء الفئة "20". هل تتوقع شيئا مختلفا؟ لو كان الأمر كذلك، فما هو و لماذا؟

بطريقة مماثلة:

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

يعطي "20".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top