我正在研究XML解析,并且我一直在使用minidom。文件中使用了许多自定义定义的实体,因此使用lxml一直很麻烦。 DOM似乎忽略了这一点,因此对于我目前的工作,我正在使用DOM。
我需要从xml中获取所有<para>
标签,并在标签内获取所有内部文本。然后,我需要删除标签的第一次出现和最后一次出现,并获取其余标签及其内部文本中的所有文本。到目前为止,这是我的代码:
file='C:/My_Folders/something.xml'
doc=parse(file)
paras=doc.getElementsByTagName('para')
def getText(paras):
rc = []
for node in paras:
if node.nodeType == node.TEXT_NODE:
rc.append(node.data)
else:
rc.append(getText(node.childNodes))
return ','.join(rc)
print(getText(paras))
在这段代码中,我从不需要的所有<para>
标记中获取了所有文本。我不希望<para>
标签的第一次和最后一次出现。有人可以帮我吗?
这是示例XML。
<para
><reviewer-note >tlewis</reviewer-note
></para>
<para><user-typing>Resilient.</para>
<para>hashing.</para>
<para>"X" release.</para>
<para>[See <url
href="http://www.google.com"
>Trunk/ECMP Groups</url>.]</para>
我不希望第一个标签文本。即tlewis,以及最后一个标记文字。即中继/ ECMP组。我希望其他<para>
标签文本(例如Resilient,哈希和“ X”)发布并连接这3个。
所需的输出: 弹性,散列,“ X”版本
答案 0 :(得分:0)
您可以使用BeautifulSoup解析XML。在我的示例中,我使用<para>
方法选择了所有select()
标签,然后将它们串联在一起(没有第一个和最后一个):
data = """<para
><reviewer-note >tlewis</reviewer-note
></para>
<para><user-typing>Resilient.</para>
<para>hashing.</para>
<para>"X" release.</para>
<para>[See <url
href="http://www.google.com"
>Trunk/ECMP Groups</url>.]</para>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
all_params = soup.select('para')[1:-1]
string_output = ''
for param in all_params:
string_output += param.text.strip() + ','
string_output = string_output.rstrip(',')
print(string_output)
输出:
Resilient.,hashing.,"X" release.