2016-04-25 6 views
1
私は、XML minidomとxmlファイルの内容を抽出するため探してい

の両方が含まれている子ノードの完全な内容を取得し、ここでの例であります唯一の 'テキスト1':のpythonのxml minidomが子供とテキスト

DOMTree = xml.dom.minidom.parse('file.xml') 
    document = DOMTree.documentElement 
    parents = document.getElementsByTagName('parent') 
    for parent in parents: 
    child = parents.getElementsByTagName('parent')[0] 
    print(child.childNodes[0].nodeValue) # shows text1 

私は得ることができますテキスト1テキスト2なくテキスト3
私の子要素と私の子要素の完全な内容を取得するにはどうすればいいですかテキスト1テキスト2テキスト3)?子ノードを超える

答えて

1

反復処理し、それ以外Text対象とfirstChild.nodeValueの場合に.dataプロパティを取得:

print([node.data.strip() if isinstance(node, xml.dom.minidom.Text) else node.firstChild.nodeValue 
     for node in child.childNodes]) 

プリント['text1', 'text2 ', 'text3']。私ももっと単純明快で使いやすいとminidomライブラリーよりも理解何かへの切り替えを検討する


。例えば、それはxml modeBeautifulSoupとがいかに簡単であるかを参照してください。

>>> from bs4 import BeautifulSoup 
>>> data = """ 
... <parent> 
... <child> 
...   text1 
...   <subchild>text2 </subchild> 
...   text3 
... </child> 
... </parent> 
... """ 
>>> soup = BeautifulSoup(data, "xml") 
>>> print(soup.child.get_text()) 

     text1 
     text2 
     text3 
+0

それは非常にうまく機能し、そんなに@alecxeありがとう – abdoBim