0

任何人都知道为什么这个 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

4 回答 4

1

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

从您的问题中我不知道您想对这些元素和/或属性做什么 - 继续做您需要做的任何事情。

于 2010-01-09T16:13:30.470 回答
1

把它写成:

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

如果您期望类别的值为 20,对我来说效果很好。

于 2010-01-12T21:51:50.240 回答
1

它对我来说很好(修复Fin First()VinValue并传递null命名空间解析器),给出类别“20”。你期待不同的东西吗?如果是这样,是什么以及为什么?

同样地:

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

给出“20”。

于 2010-01-16T08:23:44.553 回答
0

您是否将 Xpath 表达式输入到 Xelement() 中?
要使用 Xpath,您应该尝试http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx

于 2010-01-09T14:40:34.870 回答