0

「xml」という名前の文字列に次の XML があります。

<?xml version="1.0" encoding="ISO-8859-1"?>
<Book>
  <Page>
    <Text>Blah</Text>
  </Page>
</Book>

Blah という値を取得しようとしていますが、xml.etree.cElementTree に問題があります。find() および findtext() メソッドを試しましたが、何もしませんでした。最終的に私はこれをしました:

import xml.etree.cElementTree as ET
...
root = ET.fromstring(xml)
element = root.getchildren()[0].getchildren()[0]

要素は要素と等しくなりましたが、これは私が望むものです(とにかくこのソリューションのために)が、そこから内部テキストを取得するにはどうすればよいですか? element.text は機能しません。何か案は?

編集: element.text は私に None を与えます

PS: Python 2.5 atm を使用しています。

追加の質問: Python で xml 文字列を解析するより良い方法は何ですか?

4

2 に答える 2

4

あなたにとって「うまくいかない」とはどういう意味か説明してください。私が推測するのは、あなたが実行した(または実行すべきだった)コードが私のために働いたということです((5、6)のxのPython 2.x)-以下を参照してください。import ステートメントに適切な変更を加えることで、Python 2.1 でも動作しました。element.tag目的の要素を参照していることを示すために表示したことに注意してください。

>>> xml = """\
... <?xml version="1.0" encoding="ISO-8859-1"?>
... <Book>
...   <Page>
...     <Text>Blah</Text>
...   </Page>
... </Book>
... """
>>> import xml.etree.cElementTree as ET
>>> root = ET.fromstring(xml)
>>> element = root.getchildren()[0].getchildren()[0]
>>> element.tag
'Text'
>>> element.text
'Blah'
>>>

おそらく、最初の質問が整理されるまで、追加の質問についてレインチェックを行いたいと思います;-)

于 2010-06-10T09:39:19.880 に答える
0

大規模でない .xml (おそらく数メガバイト) の場合は、あなたのやり方で問題ないはずですが、タグを知っていて、出力として値が必要な場合は、主にhttp:/のおかげでそれを行う方法を見つけました。 /enginerds.craftsy.com/blog/2014/04/parsing-large-xml-files-in-python-without-a-billion-gigs-of-ram.htmlしかし、私のニーズに合わせて変更し、必要さえありませんxml.etree はまったく。例えば:

path = 'yourxmlfilepath.xml'
tagyouwant='Headline' #just an example, i wanted the text between 'Headline' tags
opentag='<'+tagyouwant+'>'
closetag='</'+tagyouwant+'>'

with open(path,'rb') as inputfile:
    for line in inputfile:
        if opentag in line:
            strtoget=str(line)
            strtoget=strtoget.replace(opentag,"") #trimming the tags from the text
            strtoget=strtoget.replace(closetag,"")
            print strtoget

最後の print ステートメントの代わりに、今持っている文字列でやりたいことができます。または、これをバッチまたはコマンド ラインとして実行し、.txt に出力して、その方法ですべての値を保存することもできます (実際に何をしたいかによって異なります)。

とにかく、これは、すでに何を取得したいのかが正確にわかっている場合に、巨大なxmlファイルを解析するための賢明でメモリ効率の良い方法だと思いました。

于 2017-03-15T16:36:30.940 に答える