【问题标题】:Exception: The XPath expression evaluated to unexpected type System.Xml.Linq.XText异常:XPath 表达式评估为意外类型 System.Xml.Linq.XText
【发布时间】:2018-11-29 07:29:11
【问题描述】:

我正在尝试使用 xpath 从 Xml 中获取值。示例 xml:

 <Wetter>
    <Tabelle>
        <internalID>38</internalID>
        <Name>Algier</Name>
        <Tag>Donnerstag</Tag>
        <Datum>29.11.18</Datum>
        <Symbol>heiter.gif</Symbol>
        <deutsch>heiter</deutsch>
        <englisch>partly cloudy</englisch>
        <franzoesisch>Peu nuageux / Quelques nuages</franzoesisch>
        <italienisch>poco nuvoloso</italienisch>
        <spanisch>Parcialmente nuboso</spanisch>
        <portugiesisch>Parcialmente enublado</portugiesisch>
        <Tmin>14</Tmin>
        <Tmax>22</Tmax>
        <TminF>57</TminF>
        <TmaxF>72</TmaxF>
        <Regenwk>0</Regenwk>
        <WindRi>N</WindRi>
        <WindBft>2</WindBft>
    </Tabelle>
</Wetter>

整个 xml 被打包到 XDocument 对象中,我正在尝试根据该节点中的“名称”值访问“Tabelle”节点的“基准”字段:

FormattableString xpath = $"/Wetter/Tabelle[Name = '{name}'][1]/Datum/text()";
var date = weatherXml.XPathSelectElement(xpath.ToString(CultureInfo.InvariantCulture));
return date.Value;

我已经在各种测试人员中测试了这个 xpath,它似​​乎没问题,但是在执行代码时,它给出了这个异常:

The XPath expression evaluated to unexpected type System.Xml.Linq.XText

我还尝试根据其他堆栈问题将 XPathSelectElement 更改为 XpathEvaluate,但结果我得到了 null。

【问题讨论】:

  • 建议对对象/类使用反序列化...
  • 如果您删除 /text() 以便选择返回 &lt;Date&gt; 元素而不是其文本,它应该可以工作。
  • @JohnB Ye,这也是一种方式,但我想使用XPath来学习一下。
  • @KlausGütter 工作得很好,谢谢伙计。您能否向我描述一下为什么它在 xpath 测试器中有效,而 c# 给出了这个错误?
  • XPath 很好,但它不返回 XPathSelectElement 所需的元素,而是返回文本节点。另见我的回答。

标签: c# xml xpath


【解决方案1】:

如果您删除 /text() 以便选择返回 &lt;Date&gt; 元素而不是其文本,它应该可以工作。 或者使用XPathEvaluate 而不是XPathSelectElement

【讨论】:

    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2019-05-24
    相关资源
    最近更新 更多