2014-10-16 98 views
0

我有一個看起來像一個XML文件:Python的minidom命名XML解析器 - 忽略子標籤

<tag1> 
    <tag2> 
     I am too good <italic>to be true</italic> 
    </tag2> 
</tag1> 

現在,當我想以「TAG2」標籤中提取數據, 然後假設XML文件讀入「XML_data」變量:

XML_data.getElementsByTagName('tag1')[0].getElementsByTagName('tag2')[0].childNodes[0].data 
evaluates to "I am too good" 
and 
XML_data.getElementsByTagName('tag1')[0].getElementsByTagName('tag2')[0].getElementsByTagName('italic')[0].childNodes[0].data 
evaluates to "to be true" 

我想是能夠TAG2中提取出完整的塊,通過忽略斜體標籤。即我希望我的出價是

"I am too good <italic>to be true</italic>" 

我該怎麼做?請幫忙。

+0

你不能 - 因爲你的代碼所暗示的,''文本是一個單獨的節點。你將不得不決定哪些節點應該算作「在線」並分別處理它們。 – jonrsharpe 2014-10-16 11:48:30

+0

你與迷你圖書館的關係如何? DOM API非常繁瑣且冗長;你可能想使用ElementTree API(也是Python stdlib的一部分);它會使這項任務*遠爲簡單*。 – 2014-10-16 11:54:34

+0

非常感謝。我懂了。我會試一試ElementTree API。爲了加快我的理解,如何使用ElementTree API進行操作? – suzee 2014-10-16 12:35:09

回答

0

最後使用ElementTree的

import xml.etree.ElementTree as ET 
import re 

def extractTextFromElement(elementName, stringofxml): 
    tree = ET.fromstring(stringofxml) 
    for child in tree.getiterator(): 
     if child.tag == elementName: 
      len = ET.tostring(child) 
      return re.sub(r'<.*?>', '', len) 


usage: extractTextFromElement('tag2', XML_data)