任何人都知道为什么此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
答案 0 :(得分: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;
}
}
}
我不知道你想要对这些元素和/或属性做什么 - 只需继续做你需要做的事情。
答案 1 :(得分:1)
将其写成:
var product = document.XPathSelectElements("//product", nameSpaceResolver).First();
IEnumerable at = (IEnumerable)product.XPathEvaluate("catzero/@id");
var category = at.Cast<XAttribute>().First<XAttribute>().Value;
如果您希望类别的值为20,则可以正常使用。
答案 2 :(得分:1)
它适用于我(将F
修复为First()
,将V
修复为Value
,并传递null
命名空间 - 解析器),类别“20”。你期待不同的东西吗?如果是这样,为什么以及为什么?
同样地:
string category = document.Descendants("product").First()
.Elements("catzero").Attributes("id").First().Value;
给出“20”。
答案 3 :(得分:0)
您是否将Xpath表达式输入Xelement()?
要使用Xpath,您应该尝试http://msdn.microsoft.com/en-us/library/system.web.ui.templatecontrol.xpathselect.aspx