2010-06-10 68 views
0

XML我在一個字符串以下XML命名爲「XML」:解析使用xml.etree.cElementTree

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

我試圖獲得價值胡說出來的,但我有麻煩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讓我無

PS:我使用Python 2.5個大氣壓。

作爲一個額外的問題:什麼是更好的方式來解析python中的xml字符串?

+0

那麼問題是什麼? – 2010-06-10 09:45:35

+0

那麼,我們有我們自己的IDE來模擬我們的產品環境。當我在DEBUG模式下運行該代碼時,它不起作用,但是當我編譯並執行它時,它工作正常。所以我想這是我們IDE中的一個錯誤。 – Andre 2010-06-10 13:46:15

回答

3

請解釋「不起作用」對您意味着什麼。我猜是你運行(或應該運行)的代碼爲我工作(Python 2.x for(5,6)) - 見下文。它甚至在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' 
>>> 

也許你想帶你的額外問題雨水檢查,直到我們得到的第一個整理出來;-)

+0

好吧,我不知道發生了什麼變化,但是我複製並粘貼了你的代碼,它可以工作。什麼是一天的開始...... – Andre 2010-06-10 09:45:32

0

對於非大規模.xmls(幾MB也許)的你的方式應該沒問題,但如果你知道標籤,只想把值作爲輸出,我找到了一種方法,主要是因爲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 

而不是最終的打印聲明,你可以用你現在擁有的字符串做你想做的。或者,您也可以將其作爲批處理或命令行運行並輸出到.txt,並按照這種方式存儲所有值(實際取決於您想要如何處理它)。

無論如何,我認爲這是一種聰明的,高效的內存分析方法,當你確切地知道你想要從中獲得什麼時,就可以解析巨大的xml文件。

+0

@安德烈...感謝您的評論,非常有建設性。據我所知,XML文件仍然很常見,並且存在這些問題!所以爲什麼我遇到了問題,並認爲它可能有助於其他人看到我如何解決它。 – Vlox 2017-07-14 15:46:55