0

次のようなxmlを指定します。

<Store>
<foo>
<book>
<isbn>123456</isbn>
</book>
<title>XYZ</title>
<checkout>no</checkout>
</foo>
<bar>
<book>
<isbn>7890</isbn>
</book>
<title>XYZ2</title>
<checkout>yes</checkout>
</bar>
</Store>

私はこれを解析したxmldocとして取得しています:

>>> from xml.dom import minidom
>>> xmldoc = minidom.parse('bar.xml')
>>> xmldoc.toxml()
u'<?xml version="1.0" ?><Store>\n<foo>\n<book>\n<isbn>123456</isbn>\n</book>\n<t
itle>XYZ</title>\n<checkout>no</checkout>\n</foo>\n<bar>\n<book>\n<isbn>7890</is
bn>\n</book>\n<title>XYZ2</title>\n<checkout>yes</checkout>\n</bar>\n</Store>'

このドキュメントを前処理して、解析時に単一のxml要素として解析されないようにする簡単な方法はありますか?

4

2 に答える 2

2

XML ドキュメントには、常に 1 つのルート要素があります。ルート要素を気にしない場合は、それを無視して、代わりにその子を見てください!

たとえば、より現代的な要素ツリーを使用します (ただし、minidom はこの点で同様の可能性を提供します)。

try:
  import xml.etree.cElementTree as et
except ImportError:
  import xml.etree.ElementTree as et

xmlin = '''<Store>
<foo>
<book>
<isbn>123456</isbn>
</book>
<title>XYZ</title>
<checkout>no</checkout>
</foo>
<bar>
<book>
<isbn>7890</isbn>
</book>
<title>XYZ2</title>
<checkout>yes</checkout>
</bar>
</Store>'''

root = et.fromstring(xmlin)

for child in root.getchildren():
  print et.tostring(child)
于 2010-03-25T02:48:50.890 に答える
0

xmldoc解析されたXMLオブジェクトです。 toxml()自分自身をXMLテキストの文字列に再度変換するように要求します。もう少し詳しく調べてください。

>>> xmldoc.childNodes
[<DOM Element: Store at 0x212b788>]
>>> xmldoc.childNodes[0].childNodes
[<DOM Text node "u'\n'">, <DOM Element: foo at 0x212bcd8>, <DOM Text node "u'\n'">, <DOM Element: bar at 0x212b2d8>, <DOM Text node "u'\n'">]

次に、DOMの操作が難しいことを認識し、ElementTreeについて読みます。

于 2010-03-25T03:52:23.760 に答える