c# - 异常 : The XPath expression evaluated to unexpected type System. Xml.Linq.XAttribute

标签 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>

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

我像下面这样使用 XPath 进行了尝试,但出现了异常。

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.

我的 XPath 有问题吗?

最佳答案

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

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

XPathEvaluate()更通用,可用于属性。您可以枚举结果,或获取第一个:

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

关于c# - 异常 : The XPath expression evaluated to unexpected type System. Xml.Linq.XAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39360398/

相关文章:

c# - 将 LINQ orderby 转换为就地列表排序

c# - 我如何检查数据库的属性值C#

xml - 使用 getNodeSet 解析 XML - 识别缺失的标签

ruby - 搜索 XML 并将节点的子集作为 XML 获取

c# - 模型验证异常 : Name 'AnonymousUID' cannot be used in type 'CodeFirstDatabaseSchema.AnonymousUID'

c# - 单例类可以是静态的吗?

xml - 如何在没有源 xml 文件根节点的情况下将一个 xml 文件包含在另一个 xml 中?

xml - 解析 XML 并输出到 Excel

xml - 从多个 xml 文件中提取节点

xml - 使用命名空间的 Xpath 测试