例外:XPath表达式计算为意外类型System.Xml.Linq.XAttribute

Pra*_*thi 6 c# xml xpath linq-to-xml

我有一个像下面这样的XML文件:

<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>
Run Code Online (Sandbox Code Playgroud)

现在我想要获取所有地址类型.

我尝试下面使用XPath,我得到例外.

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

例外:XPath表达式计算为意外类型System.Xml.Linq.XAttribute.

我的XPath有什么问题吗?

kjh*_*hes 9

你的XPath很好(虽然你可能希望它更具选择性),但你必须调整你的评估方式......

XPathSelectElement()顾名思义,它应该只用于选择元素.

XPathEvaluate()更通用,可用于属性.您可以枚举结果,或抓住第一个:

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