2017-10-26 17 views
1

私はxmlファイルのリストを持っており、これらのファイルのそれぞれに2つの値を取得して、データフレームのインデックスを作成したいとします。私は約1000のファイルを持っているのでforループを使用しています。それはそれほど大きくなく、これらのファイルのいくつかの機能を計算してデータフレームに格納したいのです。たとえば、最初のファイルは次のようにパンダでのXMLの解析

になります:

<?xml version="1.0" encoding="utf-8"?> 
<tag1> 
    <tag2> 
     <tag3> 
      <author>The author</author> 
      <title> The title </title> 
     </tag3> 
    </tag2> 
</tag1> 

だから私はとマルチインデックス[author,title]とのデータフレームを作成することができます。私の問題は構造として、ということである

tree = etree.parse(file) 
root = tree.getroot() 
title = tree.xpath("/tag1/tag2/tag3/author")[0].text 
author = tree.xpath("/tag1/tag2/tag3/title")[0].text 

features = [Some Feature engineering] 
features_names = [List of the feature names] 
pd.DataFrame(features,columns = features_names,index = [[author],[title]]) 

ファイルの数(タグの数)が常に同じである場合、タグの名前はファイル間で変更できます。

<?xml version="1.0" encoding="utf-8"?> 
<tag_1> 
    <secondtag> 
     <tag3> 
      <author>The second author</author> 
      <title> The second title </title> 
     </tag3> 
    </secondtag> 
</tag_1> 

タグの名前を事前に知らない著者やタイトルにアクセスするにはどうすればよいですか?

+0

の代わりにノードを見つける - ちょうどそれらのどこを探し?例: '.xpath( '// author')'? –

+0

私はいつも 'author'とtitle' tag'を持っていますが、あなたのやりかたを試してもうまくいきませんでした。 'tree.xpath( '// author')'空のリストを返しました。それにもかかわらず、私は、有罪判決を受けたファイルが最初のタグを持つことがわかりました: ''。それは問題だろうか? – ysearka

+0

ああ...だから、名前空間を含むようにxpathを変更したいと思うでしょう... –

答えて