xpath на элементе etree, дающий неожиданный результат - PullRequest
0 голосов
/ 16 мая 2018

Я использую xpath для фильтрации потока XML с тегами "item".Из списка результатов я беру первый результат и использую xpath для фильтрации тега «title».Тем не менее, когда я фильтрую «заголовок», я получаю заголовок из XML, который не имеет тега «элемент».Поскольку я выполняю xpath для набора результатов "item", поведение является неожиданным.Может кто-нибудь сказать мне, что здесь происходит.

См. Код ниже, используя xpath.

from urllib.request import urlopen
from lxml import etree
url = 'https://www.sec.gov/Archives/edgar/monthly/xbrlrss-2018-02.xml'
data = urlopen(url)
xml = data.read()
parser = etree.XMLParser(remove_blank_text=True, huge_tree=True)
root = etree.XML(xml, parser=parser)
items = root.xpath("//item")
first_item = items[0]
title = first_item.xpath("//title")[0].text
print(title)
#'All XBRL Data Submitted to the SEC for 2018-02'

Я ожидал, что первый элемент будет следующим:

<item>
<title>DST SYSTEMS INC (0000714603) (Filer)</title>
<link>http://www.sec.gov/Archives/edgar/data/714603/000071460318000013/0000714603-18-000013-index.htm</link>
<guid>http://www.sec.gov/Archives/edgar/data/714603/000071460318000013/0000714603-18-000013-xbrl.zip</guid>
<enclosure url="http://www.sec.gov/Archives/edgar/data/714603/000071460318000013/0000714603-18-000013-xbrl.zip" length="470442" type="application/zip" />
<description>10-K</description>
<pubDate>Wed, 28 Feb 2018 17:29:39 EST</pubDate>
<edgar:xbrlFiling xmlns:edgar="http://www.sec.gov/Archives/edgar"></item>

Вместо этого, когда я это сделаю: title = first_item.xpath ("// title"). Text, я получаюtitle as '' Все данные XBRL, отправленные в SEC за 2018-02 гг. *

Название исходит от:

<channel>
<title>All XBRL Data Submitted to the SEC for 2018-02</title>
<link>http://www.sec.gov/spotlight/xbrl/filings-and-feeds.shtml</link>
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" href="http://www.sec.gov/Archives/edgar/monthly/xbrlrss-2018-02.xml" rel="self" type="application/rss+xml" />
<description>This is a list all of the filings containing XBRL for 2018-02</description>
<language>en-us</language>
<pubDate>Wed, 28 Feb 2018 00:00:00 EST</pubDate>
<lastBuildDate>Wed, 28 Feb 2018 00:00:00 EST</lastBuildDate>

Но я запустил xpath для элементов, который выполнил xpath ("Предметы").Я не уверен, почему я не получаю ожидаемый результат «DST SYSTEMS INC (0000714603) (Filer)».

1 Ответ

0 голосов
/ 16 мая 2018

Вместо:

title = first_item.xpath("//title")[0].text

Использование:

title = first_item.xpath("title")[0].text

Разница "//" перед "заголовком".

Причина в том, что "// title "выбирает все элементы заголовка, независимо от того, где они находятся в документе .Просто с помощью «title» выберете узел с именем «title».

...