任何人都知道为什么这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到XML(XEelement)通常不匹配 - LINQ到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;
        }
    }
}

我不从你的问题知道你想用这些元素做什么和/或属性 - 先走一步,做任何你需要做的。

编写它为:

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

如果您希望类的价值为20工作正常,我。

它工作正常,我(定影在FFirst(),在VValue,并通过一个null命名空间分解器),得到类“20”。你期望不同的东西?如果有的话,为什么?

同样地:

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

给出 “20”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top