使用minidom从节点列表中删除第一个和最后一个节点

2024-06-02 08:01:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究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>

我不想要第一个标签文本。i、 还有最后一个标签文本。i、 e.中继/ECMP组。我想要其他的<para>标签文本,比如Resilient、hashing和“X”release并连接这3个。你知道吗

所需输出: 弹性,散列,“X”释放


Tags: 代码标记文本nodedoc标签xmldom
1条回答
网友
1楼 · 发布于 2024-06-02 08:01:33

可以使用BeautifulSoup解析XML。在我的示例中,我使用select()方法选择了所有<para>标记,然后将它们连接在一起(没有第一个和最后一个):

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.

相关问题 更多 >