例外:XPath表达式的计算结果为意外类型System.Xml.Linq.XText

时间:2018-11-29 07:29:11

标签: c# xml xpath

我正在尝试通过使用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”节点的“ Datum”字段:

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,但是结果是空值。

1 个答案:

答案 0 :(得分:1)

如果删除/text(),以使select返回<Date>元素而不是其文本,则它应该起作用。 或者,使用XPathEvaluate代替XPathSelectElement