2017-08-10 56 views
1

我在XML文件中的一些文本標籤(PDF利用popplers-utils的pdftohtml轉換爲XML),看起來像這樣:如何使用xml.dom中的minidom將內容作爲字符串獲取?

<text top="525" left="170" width="603" height="16" font="1">..part of old large book</text> 
<text top="546" left="128" width="645" height="16" font="1">with many many pages and some <i>italics text among 'plain' text</i> and more and more text</text> 
<text top="566" left="128" width="642" height="16" font="1">etc...</text> 

,我可以得到文本envolved與此示例代碼文本標籤:

import string 
from xml.dom import minidom 
xmldoc = minidom.parse('../test/text.xml') 
itemlist = xmldoc.getElementsByTagName('text') 

some_tag = itemlist[node_index] 
output_text = some_tag.firstChild.nodeValue 
# if there is all text inside <i> I can get it by 
output_text = some_tag.firstChild.firstChild.nodeValue 

# but no if <i></i> wrap only one word of the string 

,但我不能得到「的nodeValue」,如果它裏面的內容另一標籤(<i> or <b>...),無法獲得任何對象

什麼是讓所有的文字像JavaScript的innerHTML的方法或再普通字符串的最佳方式詛咒兒童標籤,即使他們包裝一些單詞而不是整個nodeValue?

感謝

回答

0

**問:

def getText(nodelist): 
    # Iterate all Nodes aggregate TEXT_NODE 
    rc = [] 
    for node in nodelist: 
     if node.nodeType == node.TEXT_NODE: 
      rc.append(node.data) 
     else: 
      # Recursive 
      rc.append(getText(node.childNodes)) 
    return ''.join(rc) 


xmldoc = minidom.parse('../test/text.xml') 
nodelist = xmldoc.getElementsByTagName('text') 

# Iterate <text ..>...</text> Node List 
for node in nodelist: 
    print(getText(node.childNodes)) 

輸出:如何使用minidom命名

這是一個遞歸的解決方案,例如讓內部內容串

..part of old large book 
with many many pages and some italics text among 'plain' text and more and more text 
etc... 

測試使用Python 3.4.2

相關問題