作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些大致标准化的 sgml 文件。但是,在打开文件并亲自阅读之前,标签中可能包含我不知道其存在的数据。例如,文件具有地址,并且通常地址具有街道、城市、州、邮政编码和电话。地址的每个元素都用标签指示
<ADDRESS>
<STREET>One Main Street
<CITY>Gotham City
<ZIP>99999 0123
<PHONE>555-123-5467
</ADDRESS>
但是,例如,我发现有国家、STREET1、STREET2 的标签。我有超过 200K 个文件需要处理,我想知道是否可以提取地址的所有元素,而不必担心知道未知标签的存在。
到目前为止我所做的是
h=fromstring(my_data_in_a_string)
for each in h.cssselect('mail_address'):
each.text_content()
但是我得到的结果是有问题的,因为我无法确定一个元素在哪里结束以及下一个元素在哪里开始
One Main StreetGotham City99999 0123555-123-5467
最佳答案
为了获取所有标签,我们像这样遍历文档:
假设您的 XML 结构如下:
<ADDRESS>
<STREET>One Main Street</STREET>
<CITY>Gotham City</CITY>
<ZIP>99999 0123</ZIP>
<PHONE>555-123-5467</PHONE>
</ADDRESS>
我们解析它:
>>> from lxml import etree
>>> f = etree.parse('foo.xml') # path to XML file
>>> root = f.getroot() # get the root element
>>> for tags in root.iter(): # iter through the root element
... print tags.tag # print all the tags
...
ADDRESS
STREET
CITY
ZIP
PHONE
现在假设您的 XML 也有额外的标签;你不知道的标签。由于我们正在遍历 XML,因此上面的代码也将返回这些标签。
<ADDRESS>
<STREET>One Main Street</STREET>
<STREET1>One Second Street</STREET1>
<CITY>Gotham City</CITY>
<ZIP>99999 0123</ZIP>
<PHONE>555-123-5467</PHONE>
<COUNTRY>USA</COUNTRY>
</ADDRESS>
上面的代码返回:
ADDRESS
STREET
STREET1
CITY
ZIP
PHONE
COUNTRY
现在如果我们想要获取标签的文本,过程是相同的。只需像这样打印 tag.text 即可:
>>> for tags in root.iter():
... print tags.text
...
One Main Street
One Second Street
Gotham City
99999 0123
555-123-5467
USA
关于python - 使用 lxml 提取所有元素事先未知的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4201562/
嘿,我有一个任意的 SQL 查询。从这个查询开始,我想知道这个查询将访问或更改哪些表。可能定义了一些函数或触发器,这些函数或触发器还会更改查询中声明的表之外的其他表。 我考虑过创建一个不同的 mysq
我是一名优秀的程序员,十分优秀!