Проблема чтения атрибута XElement - PullRequest
0 голосов
/ 09 января 2010

Кто-нибудь знает, почему это выражение 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

Ответы [ 4 ]

1 голос
/ 16 января 2010

Это прекрасно работает для меня (исправление F в First(), V в Value и передача разрешения имен null), давая категорию "20". Вы ожидаете что-то другое? Если да, то что и почему?

Аналогично:

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

дает "20".

1 голос
/ 09 января 2010

XPath и Linq-to-XML (XEelement) обычно не совпадают - Linq-to-XML использует свой собственный подход для обхода 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;
        }
    }
}

Я не знаю из вашего вопроса, что вы хотите делать с этими элементами и / или атрибутами - просто продолжайте и делайте все, что вам нужно.

1 голос
/ 13 января 2010

Запись в виде:

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

Хорошо работает для меня, если вы ожидаете, что значение категории будет равно 20.

0 голосов
/ 09 января 2010

Вы вводите выражение Xpath в Xelement ()?
Чтобы использовать Xpath, вы должны попробовать http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx

...