另一个节点中同名的XML节点

2024-04-25 08:30:02 发布

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

我要分析的XML如下所示:

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

如您所见,在另一个<group>的层次结构中有一个<group>。用BeautifulStoneSoup解析它会将内部的<group>放在外部的<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>

Tags: 代码from示例doc定义层次结构maingroup
2条回答

升级到beautifulsoup4,并安装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

您使用的是最新版本的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>

相关问题 更多 >