python3 xpath无法访问子节点(AttributeError:“NoneType”对象没有属性“text”)

2024-04-24 20:59:57 发布

您现在位置:Python中文网/ 问答频道 /正文

需要帮助解决我未能找到的问题

我有这样一个xml:

<forecast xmlns="http://weather.yandex.ru/forecast" country_id="8996ba26eb0edf7ea5a055dc16c2ccbd" part="Лен Стокгольм" link="http://pogoda.yandex.ru/stockholm/" part_id="53f767b78d8f180c28d55ebda1d07e0c" lat="59.381981" slug="stockholm" city="Стокгольм" climate="1" country="Швеция" region="10519" lon="17.956846" zoom="12" id="2464" source="Station" exactname="Стокгольм" geoid="10519">
<fact>...</fact>
<yesterday id="435077826">...</yesterday>
<informer>...</informer>
<day date="2016-04-18">
    <sunrise>05:22</sunrise>
    <sunset>20:12</sunset>
    <moon_phase code="growing-moon">14</moon_phase>
    <moonrise>15:53</moonrise>
    <moonset>04:37</moonset>
    <biomet index="3" geomag="2" low_press="1" uv="1">...</biomet>
    <day_part typeid="1" type="morning">...</day_part>
    <day_part typeid="2" type="day">...</day_part>
    <day_part typeid="3" type="evening">...</day_part>
    <day_part typeid="4" type="night">...</day_part>
    <day_part typeid="5" type="day_short">
        <temperature>11</temperature>
    </day_part>
</day>
</forecast>

(可以在https://export.yandex.ru/weather-ng/forecasts/2464.xml访问整个xml)。需要得到温度.text(11) ,尝试以下代码:

^{pr2}$

获取:

Traceback (most recent call last):
File "weather.py", line 154, in <module>
    print (day_temp.text)
AttributeError: 'NoneType' object has no attribute 'text'

我的xpath怎么了?我可以得到('.//*[@type="day_short"]')的attr,但无法获取其子(温度)文本 谢谢大家!在


Tags: textidhttprutypexmlcountryyandex
1条回答
网友
1楼 · 发布于 2024-04-24 20:59:57

xml文档包含一个默认名称空间,XPath没有默认名称空间的概念。在XPath中,您要么需要将其映射到前缀(就像对day所做的那样),要么使用其他方法(如local-name)来确定元素的标记名是否与您想要的匹配。在

.//*[@type="day_short"]/*[local-name()='temperature']

或者

^{pr2}$

相关问题 更多 >