2017-10-16 109 views
0

我想更新元素块的第二个值。 问题是我有两个具有相同元素结构的块。xmlstarlet更新值相同的元素值

我的目标是更新第二块的

1. /job/input/audio_selector/track 
2. /job/stream_assembly/audio_description/language_code 

这里是我试过

xmlstarlet edit -L \ 
      --update "//job/input//audio_selector/audio_selector/track" \ 
      --value "3,4" \ 
      --update "//job/stream_assembly//audio_description/audio_description/language_code" \ 
      --value "french" payload.xml 

这里是我的xml:

<?xml version="1.0" encoding="UTF-8"?> 
<job href="/jobs/24883"> 
    <input> 
    <deblock_enable>Auto</deblock_enable> 
    <deblock_strength>0</deblock_strength> 
    <no_psi>false</no_psi> 
    <order>1</order> 
    <timecode_source>zerobased</timecode_source> 
    <file_input> 
     <certificate_file nil="true"/> 
     <password>xxx</password> 
     <uri>source</uri> 
     <username>xxx</username> 
    </file_input> 
    <name>input_1</name> 
    <video_selector> 
     <color_space>follow</color_space> 
     <order>1</order> 
     <program_id nil="true"/> 
     <name>input_1_video_selector_0</name> 
    </video_selector> 
    <audio_selector> 
     <default_selection>true</default_selection> 
     <infer_external_filename>false</infer_external_filename> 
     <order>1</order> 
     <program_selection>1</program_selection> 
     <selector_type>track</selector_type> 
     <track>1</track> 
     <unwrap_smpte337>true</unwrap_smpte337> 
     <name>input_1_audio_selector_0</name> 
    </audio_selector> 
    <audio_selector> 
     <default_selection>false</default_selection> 
     <infer_external_filename>false</infer_external_filename> 
     <order>2</order> 
     <program_selection>1</program_selection> 
     <selector_type>track</selector_type> 
     <track>UPDATE THIS</track> 
     <unwrap_smpte337>true</unwrap_smpte337> 
     <name>input_1_audio_selector_1</name> 
    </audio_selector> 
    </input> 
    <timecode_config> 
    <require_initial_timecode>false</require_initial_timecode> 
    <source>zerobased</source> 
    <sync_threshold nil="true"/> 
    </timecode_config> 
    <ad_trigger>scte35_splice_insert</ad_trigger> 
    <ad_avail_offset>0</ad_avail_offset> 
    <priority>100</priority> 
    <user_data/> 
    <avsync_enable>true</avsync_enable> 
    <avsync_pad_trim_audio>true</avsync_pad_trim_audio> 
    <stream_assembly> 
    <name>stream_assembly_0</name> 
    <video_description> 
     <afd_signaling>None</afd_signaling> 
     <anti_alias>true</anti_alias> 
     <drop_frame_timecode>true</drop_frame_timecode> 
     <fixed_afd nil="true"/> 
     <force_cpu_encode>false</force_cpu_encode> 
     <height>1080</height> 
     <insert_color_metadata>false</insert_color_metadata> 
     <respond_to_afd>None</respond_to_afd> 
     <sharpness>50</sharpness> 
     <stretch_to_output>false</stretch_to_output> 
     <timecode_passthrough>false</timecode_passthrough> 
     <vbi_passthrough>false</vbi_passthrough> 
     <width>1920</width> 
     <h264_settings> 
     <adaptive_quantization>medium</adaptive_quantization> 
     <bitrate>14000000</bitrate> 
     <buf_fill_pct nil="true"/> 
     <buf_size nil="true"/> 
     <cabac>true</cabac> 
     <flicker_reduction>off</flicker_reduction> 
     <force_field_pictures>false</force_field_pictures> 
     <framerate_denominator nil="true"/> 
     <framerate_follow_source>true</framerate_follow_source> 
     <framerate_numerator nil="true"/> 
     <gop_b_reference>false</gop_b_reference> 
     <gop_closed_cadence>1</gop_closed_cadence> 
     <gop_markers>false</gop_markers> 
     <gop_num_b_frames>2</gop_num_b_frames> 
     <gop_size>50.0</gop_size> 
     <gop_size_units>frames</gop_size_units> 
     <interpolate_frc>false</interpolate_frc> 
     <look_ahead_rate_control>medium</look_ahead_rate_control> 
     <max_bitrate nil="true"/> 
     <max_qp nil="true"/> 
     <min_buf_occ nil="true"/> 
     <min_i_interval>0</min_i_interval> 
     <min_qp nil="true"/> 
     <num_ref_frames>1</num_ref_frames> 
     <par_denominator nil="true"/> 
     <par_follow_source>true</par_follow_source> 
     <par_numerator nil="true"/> 
     <passes>1</passes> 
     <qp nil="true"/> 
     <repeat_pps>false</repeat_pps> 
     <rp2027_syntax>false</rp2027_syntax> 
     <scd>true</scd> 
     <sei_timecode>false</sei_timecode> 
     <slices>1</slices> 
     <slow_pal>false</slow_pal> 
     <softness nil="true"/> 
     <svq>0</svq> 
     <telecine>None</telecine> 
     <level>4.1</level> 
     <profile>High</profile> 
     <rate_control_mode>CBR</rate_control_mode> 
     <gop_mode>fixed</gop_mode> 
     <interlace_mode>progressive</interlace_mode> 
     </h264_settings> 
     <selected_gpu nil="true"/> 
     <codec>h.264</codec> 
    </video_description> 
    <audio_description> 
     <audio_type>0</audio_type> 
     <follow_input_audio_type>false</follow_input_audio_type> 
     <follow_input_language_code>false</follow_input_language_code> 
     <language_code>English</language_code> 
     <order>1</order> 
     <stream_name nil="true"/> 
     <timecode_passthrough>false</timecode_passthrough> 
     <aac_settings> 
     <ad_broadcaster_mix>false</ad_broadcaster_mix> 
     <bitrate>192000</bitrate> 
     <coding_mode>2_0</coding_mode> 
     <latm_loas>false</latm_loas> 
     <mpeg2>false</mpeg2> 
     <sample_rate>48000</sample_rate> 
     <profile>LC</profile> 
     <rate_control_mode>CBR</rate_control_mode> 
     </aac_settings> 
     <codec>aac</codec> 
     <audio_source_name>Audio Selector 1</audio_source_name> 
    </audio_description> 
    <audio_description> 
     <audio_type>0</audio_type> 
     <follow_input_audio_type>false</follow_input_audio_type> 
     <follow_input_language_code>false</follow_input_language_code> 
     <language_code>UPDATE THIS</language_code> 
     <order>2</order> 
     <stream_name nil="true"/> 
     <timecode_passthrough>false</timecode_passthrough> 
     <aac_settings> 
     <ad_broadcaster_mix>false</ad_broadcaster_mix> 
     <bitrate>192000</bitrate> 
     <coding_mode>2_0</coding_mode> 
     <latm_loas>false</latm_loas> 
     <mpeg2>false</mpeg2> 
     <sample_rate>48000</sample_rate> 
     <profile>LC</profile> 
     <rate_control_mode>CBR</rate_control_mode> 
     </aac_settings> 
     <codec>aac</codec> 
     <audio_source_name>Audio Selector 2</audio_source_name> 
    </audio_description> 
    </stream_assembly> 
    <output_group> 
    <custom_name>file_group_4</custom_name> 
    <name nil="true"/> 
    <order>1</order> 
    <file_group_settings> 
     <rollover_interval nil="true"/> 
     <destination> 
     <password>xxx</password> 
     <username>xxx</username> 
     <uri>destination</uri> 
     </destination> 
    </file_group_settings> 
    <type>file_group_settings</type> 
    <output> 
     <description nil="true"/> 
     <extension>mov</extension> 
     <log_edit_points>false</log_edit_points> 
     <name_modifier/> 
     <order>1</order> 
     <mov_settings> 
     <growing_reference>false</growing_reference> 
     <include_clap>false</include_clap> 
     <include_cslg>true</include_cslg> 
     <omneon_padding>true</omneon_padding> 
     <reference>self_contained</reference> 
     <write_xdcam>false</write_xdcam> 
     </mov_settings> 
     <stream_assembly_name>stream_assembly_0</stream_assembly_name> 
     <container>mov</container> 
    </output> 
    </output_group> 
</job> 
我使用xmlstarlet新我什么都试过,但我仍然不能得到它的权利

。 我希望有人会帮助。

非常感谢您

回答

0

xmlstarlet解决方案:

xmlstarlet ed -L -u "//job/input/audio_selector[2]/track" -v "3,4" \ 
-u "//job/stream_assembly/audio_description[2]/language_code" -v "french" payload.xml 

  • ...audio_selector[2] - 选择audio_selector标签
之间的第2节点