如何解决提取 body/p 标签中的所有文本
我的主要任务是在以下名为“sample.xml”的 XML 文件中提取 p
标签中 body
标签中的所有文本:
<?xml version="1.0" encoding="UTF-8"?>
<newsItem >
<itemMeta>
<itemClass qcode="ninat:text"/>
<versionCreated>2018-01-16T12:05:19</versionCreated>
<pubStatus qcode="stat:usable"/>
<edNote role="sttnote:private">Aikamuoto printille</edNote>
</itemMeta>
<contentSet>
<inlineXML contenttype="xhtml/xml">
<html>
<body>
<p>Toiselle kierrokselle mennään,mikäli yksikään ehdokas ei ole saanut yli puolta ensimmäisellä kierroksella annetuista äänistä.</p>
<p>Vaaleissa ovat ehdokkaina <Person>Tuula Haatainen</Person> (sd.),<Person>Pekka Haavisto</Person> (vihr.),<Person>Laura Huhtasaari</Person> </p>
<p codej="obj:57654">Varsinaisena vaalipäivänä vaalihuoneistot ovat auki tuttuun tapaan kello 9:n ja 20:n välisenä aikana. Tällöin on äänestettävä siinä paikassa,joka kotiin jaettuun äänestyskorttiin on merkitty. Osa äänestäjistä sai kortin kotiinsa jo ennen joulua.</p></body>
</html>
</inlineXML>
</contentSet>
</newsItem>
这是我的代码:
from xml.etree import cElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
for teks in list(root):
teksMain = teks.findall('p').text
print('main body:',teksMain)
它没有用。我的副业是从 <p codej="obj:57654">
中提取“obj:57654”。
解决方法
getroot() 返回单个元素, findall() 返回一个列表,所以 你应该迭代那个。另外,我不确定为什么 findall('p') 找不到什么 你想要,但 xpath 表达式 './/p' 确实可以,试试这个:
from xml.etree import cElementTree as ET
tree = ET.parse('sample.xml')
root = tree.getroot()
for teksMain in root.findall('.//p'):
print('main body:',teksMain.text)
,
要获取 p
元素(包括 Person
子元素及其 .tail
)的所有文本,请使用 itertext()
。
from xml.etree import ElementTree as ET
tree = ET.parse('sample.xml')
for p in tree.findall(".//p"):
# Get all inner text
print("".join(t for t in p.itertext()))
# Get the 'codej' attribute value (None if it does not exist)
print(p.get("codej"))
输出:
Toiselle kierrokselle mennään,mikäli yksikään ehdokas ei ole saanut yli puolta ensimmäisellä kierroksella annetuista äänistä.
None
Vaaleissa ovat ehdokkaina Tuula Haatainen (sd.),Pekka Haavisto (vihr.),Laura Huhtasaari
None
Varsinaisena vaalipäivänä vaalihuoneistot ovat auki tuttuun tapaan kello 9:n ja 20:n välisenä aikana. Tällöin on äänestettävä siinä paikassa,joka kotiin jaettuun äänestyskorttiin on merkitty. Osa äänestäjistä sai kortin kotiinsa jo ennen joulua.
obj:57654
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。