Форум сайта python.su
0
Доброго времени суток!
Уважаемые форумчане, помогите пожалуйста, у меня есть xml файл вида:
<hostlist> <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> <name>domen.ua</name> <verification state="VERIFIED"/> <crawling state="INDEXED"/> <virused>false</virused> <last-access>2015-07-05T23:59:00</last-access> <tcy>10</tcy> <url-count>1135523</url-count> <index-count>1234</index-count> </host> <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> <name>domen.ru</name> <verification state="VERIFIED"/> <crawling state="INDEXED"/> <virused>false</virused> <last-access>2015-07-05T23:59:00</last-access> <tcy>80</tcy> <url-count>1503743</url-count> <index-count>123456</index-count> </host> <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> <name>avto.domen.ru</name> <verification state="VERIFIED"/> <crawling state="INDEXED"/> <virused>false</virused> <last-access>2015-07-05T11:28:00</last-access> <tcy>0</tcy> <url-count>9</url-count> <index-count>1</index-count> </host> </hostlist>
Офлайн
103
>>> from lxml import etree >>> >>> s = """<hostlist> ... <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> ... <name>domen.ua</name> ... <verification state="VERIFIED"/> ... <crawling state="INDEXED"/> ... <virused>false</virused> ... <last-access>2015-07-05T23:59:00</last-access> ... <tcy>10</tcy> ... <url-count>1135523</url-count> ... <index-count>1234</index-count> ... </host> ... <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> ... <name>domen.ru</name> ... <verification state="VERIFIED"/> ... <crawling state="INDEXED"/> ... <virused>false</virused> ... <last-access>2015-07-05T23:59:00</last-access> ... <tcy>80</tcy> ... <url-count>1503743</url-count> ... <index-count>123456</index-count> ... </host> ... <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> ... <name>avto.domen.ru</name> ... <verification state="VERIFIED"/> ... <crawling state="INDEXED"/> ... <virused>false</virused> ... <last-access>2015-07-05T11:28:00</last-access> ... <tcy>0</tcy> ... <url-count>9</url-count> ... <index-count>1</index-count> ... </host> ... </hostlist>""" >>> >>> e = etree.fromstring(s) >>> print e.xpath('.//name[text()="domen.ru"]/ancestor::host/index-count/text()') ['123456']
Офлайн
857
doc.xpath(r'.//name[text() = "domen.ru"]/../index-count/text()')
Офлайн
103
py.user.next
<hostlist> <host href="https://webmaster.yandex.ru/api/v2/hosts/*****" rel="self"> <name>domen.ru</name> <index-count>123456</index-count> </host> <site href="https://webmaster.yandex.ru/api/v2/hosts/*****"> <name>domen.ru</name> <index-count> <host name="yandex"> 1 </host> <host name="google"> 2 </host> </index-count> </site> </hostlist>
Отредактировано terabayt (Июль 16, 2015 20:44:42)
Офлайн
857
terabaytУ него там всегда есть host. Список узлов (hostlist), состоящий из узлов (host), включающих информацию об узле.
поэтому лучше всегда указывать родителя
Офлайн
103
py.user.nextда, но
У него там всегда есть host. Список узлов (hostlist), состоящий из узлов (host), включающих информацию об узле.
Офлайн
857
terabaytНу, судя по его xml, он грамотно сформирован. В таком не возникнет каша-малаша.
1) не факт что у него действительно так, а это прост пример
terabaytНе, нельзя покрывать все варианты раньше времени. Это преждевременная оптимизация.
2) факт, что что-то измениться
Офлайн
103
py.user.nextя и не говорю об этом
Не, нельзя покрывать все варианты раньше времени.
py.user.nextну эт прост пример
Как в hostlist может появиться site, если это не хост? А если это host, почему он называется site, а не host?
Офлайн
857
terabaytТак зачем явно указывать, если это и так явно? У тебя она как бы предусматривает наличие каши среди нормального кода. Даже если каша есть какая-то, она должна быть почищена до передачи в функцию разбора. Нельзя писать код, который делает всё сразу. Чисткой должна заниматься одна функция, вытаскиванием нужного поля - другая. В этом заключается их функциональная прочность.
я и не говорю об этом
я говорю о том, что нужно явно указывать!
Офлайн
0
Всем спасибо!
Офлайн