2017-03-29 17 views
6

私はXMLファイルがあります。XML ElementTreeのインデックスタグが

<sentence id="en_BlueRibbonSushi_478218345:2"> 
    <text>It has great sushi and even better service.</text> 
</sentence> 
<sentence id="en_BlueRibbonSushi_478218345:3"> 
    <text>The entire staff was extremely accomodating and tended to my every need.</text> 
</sentence> 
<sentence id="en_BlueRibbonSushi_478218345:4"> 
    <text>I&apos;ve been to this restaurant over a dozen times with no complaints to date.</text> 
</sentence> 

XMLのElementTreeを使用して、私は、タグの属性category=を持って<Opinion>を挿入したいと思います。私は文字list = ['a', 'b', 'c']のリストを持っていると言う、それは私が持って漸進各テキストにそれらをasignすることが可能である:

<sentence id="en_BlueRibbonSushi_478218345:2"> 
    <text>It has great sushi and even better service.</text> 
    <Opinion category='a' /> 
</sentence> 
<sentence id="en_BlueRibbonSushi_478218345:3"> 
    <text>The entire staff was extremely accomodating and tended to my every need.</text> 
    <Opinion category='b' /> 
</sentence> 
<sentence id="en_BlueRibbonSushi_478218345:4"> 
    <text>I&apos;ve been to this restaurant over a dozen times with no complaints to date.</text> 
    <Opinion category='c' /> 
</sentence> 

私は文章id属性を使用することができますが、これは私のリストラの多くを必要とする認識していますコード。基本的には、私のリストのインデックスに合わせて各文のエントリを索引付けできるようにしたいと思います。

+2

属性が辞書です。辞書の順序は、どのような方法でも保持されることは保証されません。 – leovp

+0

わかりました。バリデーターとの連携(ゴールドスタンダードとしてのチェック)は変更する必要はありません。ありがとう! – user3058703

+0

再現可能な例ができますか? – kilojoules

答えて

4

ファクトリ関数SubElementを使用して、ツリーに要素を追加できます。 は、これはあなたのドキュメントツリーに要素を追加します、あなたのXMLデータがdataという変数であると仮定すると:

import xml.etree.ElementTree as ET 
tree = ET.XML(data) 
for elem, category in zip(tree.findall('sentence'), ['a', 'b', 'c']): 
    Opinion = ET.SubElement(elem, 'Opinion') 
    Opinion.set('category', category) 

ET.dump(tree) # prints the tree; tree.write('output.xml') is another option 
+1

'' zip'は、最短のiterableがなくなったときに停止するので、あなたが提案したスライスは必要ありません(違いはないため)。いずれにしても、OPにはカテゴリリストを生成する面白い方法があると仮定しています。 – cco

+0

これは私が必要としていたものです。感謝万円! – user3058703

関連する問題