另一个节点中具有相同名称的XML节点

时间:2013-10-18 20:49:16

标签: python xml beautifulsoup

我要解析的XML看起来像这样:

<root>
    <group>
        <somethingelse>
            <group></group>
        </somethingelse>
    </group>
</root>

如您所见,另一个<group>的层次结构中有<group>。使用BeautifulStoneSoup解析它会将内部<group>放在外部<group>之外(参见下面的示例)。

如何防止这种情况并将内部from BeautifulSoup import BeautifulStoneSoup xml = """ <root> <group> <somethingelse> <group></group> </somethingelse> </group> </root> """ def main(): doc = BeautifulStoneSoup(xml) print doc.prettify() if __name__ == '__main__': main() 保留在定义它的位置?


代码

<root>
 <group>
  <somethingelse>
  </somethingelse>
 </group>
 <group>
 </group>
</root>

结果

{{1}}

2 个答案:

答案 0 :(得分:2)

升级到BeautifulSoup 4,然后安装lxml解析器。这种组合正确处理XML:

>>> from bs4 import BeautifulSoup
>>> doc = BeautifulSoup(xml, 'xml')
>>> print doc.prettify()
<?xml version="1.0" encoding="utf-8"?>
<root>
 <group>
  <somethingelse>
   <group/>
  </somethingelse>
 </group>
</root>

使用以下命令安装两个项目:

pip install beautifulsoup4 lxml

答案 1 :(得分:2)

您使用的是最新版本的BeautifulSoup吗?使用BeautifulSoup4,我设法得到了这个:

from bs4 import BeautifulSoup

doc = BeautifulSoup(xml, features="xml")
print doc.prettify()

结果是:

<?xml version="1.0" encoding="utf-8"?>
<root>
 <group>
  <somethingelse>
   <group/>
  </somethingelse>
 </group>
</root>