0

BeautifulSOup を使用して xml を解析しようとしていますが、不適切な出力が発生します。

ファイル.xml:

<?xml version="1.0" ?> 
<opening name="value1" >
      <element name="value1.1"/>
      <element name="value1.2">
        <element name="1.2.1"/>
      </element>
      <element name="value1.3">
        <element name="value1.3.1"/>
      </element>
</opening>

次のコードを使用します。

>>> a=open('file.xml').read()
>>> import BeautifulSoup
>>> s= BeautifulSoup.BeautifulSoup(a)
>>> print s.prettify()

次の出力が得られます。

<?xml version='1.0' encoding='utf-8'?>
<opening name="value1">
 <element name="value1.1">
 </element>
 <element name="value1.2">
 </element>
 <element name="1.2.1">
 </element>
 <element name="value1.3">
 </element>
 <element name="value1.3.1">
 </element>
</opening>

すべての要素を開始タグの子として表示するのはなぜですか? このファイルを正しく解析するにはどうすればよいですか?

s= BeautifulSoup. BeautifulStoneSoup(a) も使用してみましたが、これも機能しませんでした。

4

2 に答える 2

1

BeautifulSoup主に、HTML不正な形式の HTML を処理するために最善を尽くすパーサーです。私が強くお勧めする XML ライブラリがありますlxml- 試してみてください。

例:

import lxml.etree

xml = """<?xml version="1.0" ?> 
<opening name="value1" >
      <element name="value1.1"/>
      <element name="value1.2">
        <element name="1.2.1"/>
      </element>
      <element name="value1.3">
        <element name="value1.3.1"/>
      </element>
</opening>
"""

r = lxml.etree.fromstring(xml)
r.xpath('//element/@name')
# ['value1.1', 'value1.2', '1.2.1', 'value1.3', 'value1.3.1']
于 2012-08-13T20:53:55.110 に答える
0

Beautiful Soup 3では、タグを正しく閉じるために特別な引数が必要です。BeautifulStoneSoupコンストラクターへのselfClosingTags引数が必要です。次のようなものを使用します:

soup = BeautifulStoneSoup(markup, selfClosingTags=['element'])
于 2012-08-23T06:10:17.697 に答える