Exception: The XPath expression evaluated to unexpected type System.Xml.Linq.XAttribute

回眸只為那壹抹淺笑 提交于 2020-06-27 07:04:34

问题


I've an XML file like below:

<Employees>
  <Employee Id="ABC001">
    <Name>Prasad 1</Name>
    <Mobile>9986730630</Mobile>
    <Address Type="Perminant">
      <City>City1</City>
      <Country>India</Country>
    </Address>
    <Address Type="Temporary">
      <City>City2</City>
      <Country>India</Country>
    </Address>
  </Employee>

Now I want get all Address Type's.

I tried like below using XPath and I'm getting exception.

var xPathString = @"//Employee/Address/@Type";
doc.XPathSelectElements(xPathString); // doc is XDocument.Load("xml file Path")

Exception: The XPath expression evaluated to unexpected type System.Xml.Linq.XAttribute.

Is there any issue with my XPath?


回答1:


Your XPath is fine (although you might want it to be more selective), but you have to adjust how you evaluate it...

XPathSelectElement(), as its name implies, should only be used to select elements.

XPathEvaluate() is more general and can be used for attributes. You can enumerate over the results, or grab the first:

var type = ((IEnumerable<object>)doc.XPathEvaluate("//Employee/Address/@Type"))
                                    .OfType<XAttribute>()
                                    .Single()
                                    .Value;



回答2:


Expanding on kjhughes's answer, I've tended to create an XElement class extension for this so that I can simply call element.XPathSelectAttribute(), which makes my calling code look a great deal clearner.

public static class XElementExtensions
{
    public static XAttribute XPathSelectAttribute(this XElement element, string xPath)
    {
        return ((IEnumerable<object>)element.XPathEvaluate(xPath)).OfType<XAttribute>().First();
    }
}


来源:https://stackoverflow.com/questions/39360398/exception-the-xpath-expression-evaluated-to-unexpected-type-system-xml-linq-xat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!