【发布时间】: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()以便选择返回<Date>元素而不是其文本,它应该可以工作。 -
@JohnB Ye,这也是一种方式,但我想使用XPath来学习一下。
-
@KlausGütter 工作得很好,谢谢伙计。您能否向我描述一下为什么它在 xpath 测试器中有效,而 c# 给出了这个错误?
-
XPath 很好,但它不返回 XPathSelectElement 所需的元素,而是返回文本节点。另见我的回答。