Python–;分解bs4.element.NavigableString(使用BeautifulSoup解析xml)

Python–;分解bs4.element.NavigableString(使用BeautifulSoup解析xml),python,xml,beautifulsoup,Python,Xml,Beautifulsoup,Ï有一个半解析的xml结果。我称之为半成品,因为它有点有效,也有点无效。这是因为原始文件是“半格式” 我尝试过使用元素树进行解析,但效果更差,所以返回使用BeautifulSoup进行解析 我需要帮助获得孩子们的名字,下面是“行” 我有很多孩子,最高级的如下: <Line> <ID>0b10-bd-59-ac-bac</ID> <Type ref="cc-63-5c-bf-01"/> <Base ref="8c

Ï有一个半解析的xml结果。我称之为半成品,因为它有点有效,也有点无效。这是因为原始文件是“半格式”

我尝试过使用元素树进行解析,但效果更差,所以返回使用BeautifulSoup进行解析

我需要帮助获得孩子们的名字,下面是“行”

我有很多孩子,最高级的如下:

<Line> 
<ID>0b10-bd-59-ac-bac</ID>
<Type ref="cc-63-5c-bf-01"/>
<Base ref="8c-20-59-b7-eb"/>
<length multiplier="none" unit="m">28.536756216711005</length>
<b0ch multiplier="none" unit="S"/>
<bch multiplier="none" unit="S"/>
<r multiplier="none" unit="ohm">0.03361629882328556</r>
<r0 multiplier="none" unit="ohm">0.033624859850150575</r0>
<x multiplier="none" unit="ohm">0.008802762240586673</x>
<x0 multiplier="none" unit="ohm">1.1414702486684403E-05</x0>
</Line>

0b10-bd-59-ac-bac
28.536756216711005
0.03361629882328556
0.033624859850150575
0.008802762240586673
1.1414702486684403E-05
当我在“行”下面列出信息时,我得到:

[<ID>0b10-bd-59-ac-bac</ID>, <Type ref="cc-63-5c-bf-01"/>, <Base ref="8c-20-59-b7-eb"/>, <length multiplier="none" unit="m">28.536756216711005</length>, <b0ch multiplier="none" unit="S"/>, <bch multiplier="none" unit="S"/>, <r multiplier="none" unit="ohm">0.03361629882328556</r>, <r0 multiplier="none" unit="ohm">0.033624859850150575</r0>, <x multiplier="none" unit="ohm">0.008802762240586673</x>, <x0 multiplier="none" unit="ohm">1.1414702486684403E-05</x0>]
[0b10-bd-59-ac-bac,28.536756216711005,0.03361629882328556,0.0336248598550150575,0.008802762240586673,1.141470248664403E-05]
对于列表中的元素,我可以将bs4.element.NavigableString转换为string,然后根据需要对它们进行排序

但是,当我试图获取信息的“父”时,它返回整个“子”的第一个瞬间,与上面的代码相同,以开始和结束

我无法将这大量信息作为一个整体来处理。它不能作为一个整体转换为字符串

当循环遍历所有孩子时,我不知道第一个孩子的名字,也不知道下一个孩子的名字


如何在不知道名称或名称长度的情况下提取此信息?

编辑:看起来您正在尝试解析XML。也许您应该看看这个更简单的方法,而不是使用BeautifulSoup:

使用这种方法,你可以

import xml.etree.ElementTree as ET
data='''
<Line> 
<ID>0b10-bd-59-ac-bac</ID>
<Type ref="cc-63-5c-bf-01"/>
<Base ref="8c-20-59-b7-eb"/>
<length multiplier="none" unit="m">28.536756216711005</length>
<b0ch multiplier="none" unit="S"/>
<bch multiplier="none" unit="S"/>
<r multiplier="none" unit="ohm">0.03361629882328556</r>
<r0 multiplier="none" unit="ohm">0.033624859850150575</r0>
<x multiplier="none" unit="ohm">0.008802762240586673</x>
<x0 multiplier="none" unit="ohm">1.1414702486684403E-05</x0>
</Line>
'''
myroot = ET.fromstring(data)
print(myroot.tag)

例如:

myroot[3].tag, myroot[3].attrib['unit'], myroot[3].text

问题是获取文本/名称“Line”,我可以使用列表中的元素,但列表中只包含“Line”以下级别的信息。您可以发布代码吗?我仍然认为解决方案只是不使用名称,或者先列出名称。我修正了这个问题,使其能够更轻松地解析名称。如果你问我的话,美女团是相当复杂的。如果你喜欢的话,请接受这个答案,我是新来这里的,并试图赢得一些声誉:)谢谢,但正如在介绍中提到的,我尝试过用元素树进行解析,它不起作用。我不知道为什么(我想是文件设置)。BeautifulSoup在一定程度上可以工作,我在解析后得到了一些可以工作的函数,而有些则不能。我现在的问题是我能读所有的行,但不能读第一行和最后一行(“行”)。当我试图要求一个字符串的“父”时,我得到了整个组合的东西。我无法区分“行”信息。整个组合是一个bs4.element.NavigableString,这同样意味着无法转换为字符串(或者我还没有找到一种方法)。问题中的代码是解析后的样子“行”是xml文件中的顶级“子项”之一。
print(myroot[0].tag)
> ID
for x in myroot:
     print(x.tag, x.attrib, x.text)
> ID {} 0b10-bd-59-ac-bac
> Type {'ref': 'cc-63-5c-bf-01'} None
> Base {'ref': '8c-20-59-b7-eb'} None
> length {'multiplier': 'none', 'unit': 'm'} 28.536756216711005
> b0ch {'multiplier': 'none', 'unit': 'S'} None
> bch {'multiplier': 'none', 'unit': 'S'} None
> r {'multiplier': 'none', 'unit': 'ohm'} 0.03361629882328556
> r0 {'multiplier': 'none', 'unit': 'ohm'} 0.033624859850150575
> x {'multiplier': 'none', 'unit': 'ohm'} 0.008802762240586673
> x0 {'multiplier': 'none', 'unit': 'ohm'} 1.1414702486684403E-05
myroot[3].tag, myroot[3].attrib['unit'], myroot[3].text
> ('length', 'm', '28.536756216711005')