【发布时间】:2017-01-06 16:26:33
【问题描述】:
我正在尝试使用 xpath 查询和 lxml 模块获取不同的值。 所以我的代码似乎工作正常,但我有两个我无法解决的问题。 xml
<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmconvert 0.8.5">
<node id="429459476" lat="55.6091243" lon="37.7270414" version="2" timestamp="2012-02-20T18:13:50Z" changeset="10743203" uid="210173" user="osmmaker">
<tag k="amenity" v="library"/>
<tag k="name" v="Детская библиотека №101"/>
<tag k="opening_hours" v="Mo-Fr 12:00-18:00; Sa 12:00-17:00"/>
<tag k="phone" v="+7-495-3995297"/>
</node>
<node id="448176571" lat="55.6098905" lon="37.7317767" version="2" timestamp="2009-11-03T16:02:27Z" changeset="3025778" uid="75496" user="navigARTor">
<tag k="highway" v="bus_stop"/>
<tag k="name" v="Воронежская улица"/>
</node>
<node id="448176571" lat="55.6098905" lon="37.7317767" version="2" timestamp="2009-11-03T16:02:27Z" changeset="3025778" uid="75496" user="navigARTor">
<tag k="highway" v="bus_stop"/>
<tag k="name" v="Воронежская улица"/>
</node>
</osm>
Python 代码
from lxml import etree
tree = etree.parse('out.xml')
tags = tree.xpath('./node[tag[not(@k = preceding::tag/@k)]]')
with open('10.xml','w') as f:
for tag in tags:
f.write(etree.tostring(tag,pretty_print=True).decode())
xpath 查询后的 XML
<node id="429459476" lat="55.6091243" lon="37.7270414" version="2" timestamp="2012-02-20T18:13:50Z" changeset="10743203" uid="210173" user="osmmaker">
<tag k="amenity" v="library"/>
<tag k="name" v="Детская библиотека №101"/>
<tag k="opening_hours" v="Mo-Fr 12:00-18:00; Sa 12:00-17:00"/>
<tag k="phone" v="+7-495-3995297"/>
</node>
<node id="448176571" lat="55.6098905" lon="37.7317767" version="2" timestamp="2009-11-03T16:02:27Z" changeset="3025778" uid="75496" user="navigARTor">
<tag k="highway" v="bus_stop"/>
<tag k="name" v="Воронежская улица"/>
</node>
问题 #1
如何获取完整的 xml 文档,例如:
<?xml version='1.0' encoding='UTF-8'?>
<osm version="0.6" generator="osmconvert 0.8.5">
<node id="429459476" lat="55.6091243" lon="37.7270414" version="2" timestamp="2012-02-20T18:13:50Z" changeset="10743203" uid="210173" user="osmmaker">
<tag k="amenity" v="library"/>
<tag k="name" v="Детская библиотека №101"/>
<tag k="opening_hours" v="Mo-Fr 12:00-18:00; Sa 12:00-17:00"/>
<tag k="phone" v="+7-495-3995297"/>
</node>
<node id="448176571" lat="55.6098905" lon="37.7317767" version="2" timestamp="2009-11-03T16:02:27Z" changeset="3025778" uid="75496" user="navigARTor">
<tag k="highway" v="bus_stop"/>
<tag k="name" v="Воронежская улица"/>
</node>
</osm>
问题 #2 以及如何摆脱这种胡言乱语
v="Воронежская улица
附:对不起我的英语不好,希望你能理解
【问题讨论】:
-
abacadabra 是您的原始西里尔文字。你想摆脱它(意思是:“删除它”),还是你想把它看作是常规的西里尔文字? (如果是这种情况,有标准的解决方案可以这样做。寻找“将 HTML 实体转换为文本”。)