2017-02-10 6 views
0

XMLファイル生成のビデオ編集ソフトウェアがあります。このソフトウェアには、クリップの拡張のためのすべてのデータが含まれています。 XMLはソフトウェアに有効です。それが欠けている唯一のものは、フィールド・ドミナンスの要素です(私はそこに「上の値」を設定する必要があります)。 ファイルの構造がわかりにくい部分です。私は追加する必要がある要素がsequence - media - video - format - samplecharacteristics分野であるxml.etree.ElementTreeを使用してxmeml形式のXMLに要素を追加しようとしています

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE xmeml> 
<xmeml version="5"> 
<sequence> 
<name>to_color (Resolve)</name> 
<duration>121597</duration> 
<rate> 
    <!-- ... --> 
</rate> 
<in>-1</in> 
<out>-1</out> 
<timecode> 
    <!-- ... --> 
</timecode> 
<media> 
    <video> 
     <track> 
      <clipitem id="983_0121_01_1_5FF70094C4A64669BC77.mov 0"> 
       <name>983_0121_01_1_5FF70094C4A64669BC77.mov</name> 
       <duration>271</duration> 
       <rate> 
        <timebase>25</timebase> 
        <ntsc>false</ntsc> 
       </rate> 
       <start>0</start> 
       <end>221</end> 
       <enabled>true</enabled> 
       <in>25</in> 
       <out>246</out> 
       <file id="983_0121_01_1_5FF70094C4A64669BC77.mov 2"> 
        <duration>271</duration> 
        <rate> 
         <!-- ... --> 
        </rate> 
        <name>983_0121_01_1_5FF70094C4A64669BC77.mov</name> 
        <pathurl>file://Capture2/Capture2/SHARED/DAVINCI_Render/111.mxf</pathurl> 
        <timecode> 
         <!-- ... --> 
        </timecode> 
        <media> 
         <video> 
          <duration>271</duration> 
          <samplecharacteristics> 
           <width>1920</width> 
           <height>1080</height> 
          </samplecharacteristics> 
         </video> 
        </media> 
       </file> 
       <compositemode>normal</compositemode> 
       <filter> 
        <enabled>true</enabled> 
        <start>0</start> 
        <end>271</end> 
        <effect> 
         <name>Opacity</name> 
         <effectid>opacity</effectid> 
         <effecttype>motion</effecttype> 
         <mediatype>video</mediatype> 
         <effectcategory>motion</effectcategory> 
         <parameter> 
          <name>opacity</name> 
          <parameterid>opacity</parameterid> 
          <value>100</value> 
          <valuemin>0</valuemin> 
          <valuemax>100</valuemax> 
         </parameter> 
        </effect> 
       </filter> 
      </clipitem> 
     </track> 
     <format> 
      <samplecharacteristics> 
       <!-- this is what I need to add START --> 
       <fielddominance>upper</fielddominance> 
       <!-- this is what I need to add END--> 
       <width>1920</width> 
       <height>1080</height> 
       <pixelaspectratio>square</pixelaspectratio> 
       <rate> 
        <!-- ... --> 
       </rate> 
       <codec> 
        <!-- ... --> 
       </codec> 
      </samplecharacteristics> 
     </format> 
    </video> 
    <audio> 
     <track> 
      <!-- ... --> 
     </track> 
    </audio> 
</media> 
</sequence> 
</xmeml> 

:のように、これは以下のようになります。ここ です。 しかし、このタグも存在しますsequence - media - video - track - clipitem - file - media - video - samplecharacteristics

xml.etree.ElementTreeをパーサとして使用します。

import xml.etree.ElementTree as ET 
tree = ET.parse(r'\\capture2\11\in.xml') 
root = tree.getroot() 
fieldd = ET.Element('fielddominance') 
fieldd.set('field','upper') 
for tag in root.iter('samplecharacteristics'): 
    tag.append(fieldd) 
output_file = r'\\capture2\11\new.xml' 
with open(output_file, 'wb') as out: 
    tree.write(out, encoding='utf-8') 

これは、すべてのsamplecharacteristicsタグにfielddominanceを追加します。ここに は、私がしようとしています、そしてもちろん、私はそれをすべて間違っているんですよ。私は、属性としてではなく、タグ内に 'upper'値を設定する方法は知られていません。私が望む何

formatタグに<fielddominance>upper</fielddominance>を書きますが、あなたが変更したいsamplecharacteristicsを隔離するためのElementTreeのlimited XPath supportを使用することができます<track>タグ

答えて

1

を省略することです。また、要素のテキストの設定は、単にsetting its .text attributeによって行われます。

これを試してみてください:

import xml.etree.ElementTree as ET 

tree = ET.parse('in.xml') 
fieldd = ET.Element('fielddominance') 
fieldd.text = 'upper' 
for tag in tree.findall("./sequence/media/video/format/samplecharacteristics"): 
    tag.append(fieldd) 
tree.write('new.xml', "UTF-8", True) 
+0

感謝を!私はちょうど '(./sequence)'をルートとして追加しなければなりませんでした。追加したタグの後に改行を追加できますか? ' upper'のように見えますが、これはまあまあです。私はただちょっとしたほうがいいです:) –

+1

'fieldd.tail = '\ n''を試してみてください。 –

+1

また、参照してください:http://effbot.org/zone/element-lib.htm#prettyprint –

関連する問題