【发布时间】:2019-05-23 03:16:12
【问题描述】:
我有一个 XML 文件,我想根据匹配条件删除特定元素,然后重命名/重新编号剩余的元素。
<AudioTracks>整体可以包含多个不同的<ScannedTrack>和多个in内
<AudioTracks>
<AudioTrack>
<ScannedTrack>
包含读取的输入音轨
<AudioTracks>
<AudioTrack>
包含输出的音频编码设置
我想根据输入进行以下更改:
If <ScannedTrack>
<TrackNumber>1</TrackNumber> AND <Codec>262144</Codec>
AND If <ScannedTrack>
<TrackNumber>2</TrackNumber> AND <Codec>8192</Codec>
然后删除<AudioTrack>元素,其中<TrackNumber>1
然后
IF <TrackNumber>2 exist rename as <TrackNumber>1
IF <TrackNumber>3 exist rename as <TrackNumber>2
IF <TrackNumber>4 exist rename as <TrackNumber>3
(等到无穷大)
即然后任何后续轨道向后移动 1 个轨道 ID(即原始轨道 3 现在变为新轨道 2,原始轨道 4 现在移动到新轨道 3 等)
任何人都可以根据上述要求提供修改 XML 文件的解决方案吗?
这是原始 XML 供参考:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<IsNotifying>true</IsNotifying>
<ScannedSourcePath>C:\Temp\Example.mkv</ScannedSourcePath>
<Status>Waiting</Status>
<Task>
<IsNotifying>true</IsNotifying>
<ShowAdvancedTab>false</ShowAdvancedTab>
<AudioTracks>
<AudioTrack>
<IsNotifying>true</IsNotifying>
<DRC>0</DRC>
<Gain>0</Gain>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<SampleRate>0</SampleRate>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>384</Bitrate>
<Quality>0</Quality>
<IsDefault>false</IsDefault>
<SampleRateDisplayValue>Auto</SampleRateDisplayValue>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Language>English</Language>
<LanguageCode>eng</LanguageCode>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<SampleRate>48000</SampleRate>
<Bitrate>1</Bitrate>
<ChannelLayout>1551</ChannelLayout>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<IsNotifying>true</IsNotifying>
<DRC>0</DRC>
<Gain>0</Gain>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<SampleRate>0</SampleRate>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>384</Bitrate>
<Quality>0</Quality>
<IsDefault>false</IsDefault>
<SampleRateDisplayValue>Auto</SampleRateDisplayValue>
<ScannedTrack>
<TrackNumber>2</TrackNumber>
<Language>English</Language>
<LanguageCode>eng</LanguageCode>
<Description>English (DTS) (5.1 ch)</Description>
<Codec>8192</Codec>
<SampleRate>48000</SampleRate>
<Bitrate>1536000</Bitrate>
<ChannelLayout>1551</ChannelLayout>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<IsNotifying>true</IsNotifying>
<DRC>0</DRC>
<Gain>0</Gain>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<SampleRate>48</SampleRate>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>384</Bitrate>
<Quality xsi:nil="true" />
<TrackName />
<IsDefault>false</IsDefault>
<SampleRateDisplayValue>48</SampleRateDisplayValue>
<ScannedTrack>
<TrackNumber>3</TrackNumber>
<Language>English</Language>
<LanguageCode>eng</LanguageCode>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<SampleRate>48000</SampleRate>
<Bitrate>1</Bitrate>
<ChannelLayout>1551</ChannelLayout>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<IsNotifying>true</IsNotifying>
<DRC>0</DRC>
<Gain>0</Gain>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<SampleRate>48</SampleRate>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>384</Bitrate>
<Quality xsi:nil="true" />
<TrackName />
<IsDefault>false</IsDefault>
<SampleRateDisplayValue>48</SampleRateDisplayValue>
<ScannedTrack>
<TrackNumber>4</TrackNumber>
<Language>English</Language>
<LanguageCode>eng</LanguageCode>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<SampleRate>48000</SampleRate>
<Bitrate>1</Bitrate>
<ChannelLayout>1551</ChannelLayout>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
<SubtitleTracks>
<SubtitleTrack>
<IsNotifying>true</IsNotifying>
<Burned>false</Burned>
<Default>false</Default>
<Forced>false</Forced>
<SourceTrack>
<SourceId>0</SourceId>
<TrackNumber>1</TrackNumber>
<Language>English [VOBSUB]</Language>
<LanguageCode>eng</LanguageCode>
<SubtitleType>VobSub</SubtitleType>
</SourceTrack>
<SrtOffset>0</SrtOffset>
<SubtitleType>VobSub</SubtitleType>
</SubtitleTrack>
<SubtitleTrack>
<IsNotifying>true</IsNotifying>
<Burned>false</Burned>
<Default>false</Default>
<Forced>false</Forced>
<SourceTrack>
<SourceId>0</SourceId>
<TrackNumber>2</TrackNumber>
<Language>English [VOBSUB]</Language>
<LanguageCode>eng</LanguageCode>
<SubtitleType>VobSub</SubtitleType>
</SourceTrack>
<SrtOffset>0</SrtOffset>
<SubtitleType>VobSub</SubtitleType>
</SubtitleTrack>
</SubtitleTracks>
<Source>C:\Temp.mkv</Source>
<Title>1</Title>
<Angle>1</Angle>
<PointToPointMode>Chapters</PointToPointMode>
<StartPoint>1</StartPoint>
<EndPoint>20</EndPoint>
<Destination>C:\Temp\ExampleEncoded.mkv</Destination>
<OutputFormat>Mkv</OutputFormat>
<OptimizeMP4>false</OptimizeMP4>
<IPod5GSupport>false</IPod5GSupport>
<AlignAVStart>false</AlignAVStart>
<Width>720</Width>
<Height>404</Height>
<MaxWidth xsi:nil="true" />
<MaxHeight xsi:nil="true" />
<Cropping>
<Top>0</Top>
<Bottom>0</Bottom>
<Left>0</Left>
<Right>0</Right>
</Cropping>
<HasCropping>false</HasCropping>
<Anamorphic>Automatic</Anamorphic>
<DisplayWidth>746</DisplayWidth>
<KeepDisplayAspect>true</KeepDisplayAspect>
<PixelAspectX>202</PixelAspectX>
<PixelAspectY>195</PixelAspectY>
<Modulus>2</Modulus>
<DeinterlaceFilter>Off</DeinterlaceFilter>
<CombDetect>Off</CombDetect>
<CustomCombDetect />
<Detelecine>Off</Detelecine>
<CustomDetelecine />
<Denoise>Off</Denoise>
<DenoisePreset>Light</DenoisePreset>
<DenoiseTune>None</DenoiseTune>
<CustomDenoise />
<Deblock>4</Deblock>
<Grayscale>false</Grayscale>
<Rotation>0</Rotation>
<FlipVideo>false</FlipVideo>
<Sharpen>Off</Sharpen>
<SharpenPreset>
<DisplayName>Medium</DisplayName>
<Key>medium</Key>
</SharpenPreset>
<SharpenTune>
<DisplayName>None</DisplayName>
<Key>none</Key>
</SharpenTune>
<SharpenCustom />
<VideoEncodeRateType>ConstantQuality</VideoEncodeRateType>
<VideoEncoder>X264</VideoEncoder>
<FramerateMode>VFR</FramerateMode>
<Quality>19</Quality>
<VideoBitrate xsi:nil="true" />
<TwoPass>true</TwoPass>
<TurboFirstPass>false</TurboFirstPass>
<Framerate xsi:nil="true" />
<AllowedPassthruOptions>
<AudioAllowAACPass>true</AudioAllowAACPass>
<AudioAllowAC3Pass>false</AudioAllowAC3Pass>
<AudioAllowDTSHDPass>false</AudioAllowDTSHDPass>
<AudioAllowDTSPass>false</AudioAllowDTSPass>
<AudioAllowMP3Pass>true</AudioAllowMP3Pass>
<AudioAllowTrueHDPass>false</AudioAllowTrueHDPass>
<AudioAllowFlacPass>false</AudioAllowFlacPass>
<AudioAllowEAC3Pass>false</AudioAllowEAC3Pass>
<AudioEncoderFallback>Ac3</AudioEncoderFallback>
</AllowedPassthruOptions>
<IncludeChapterMarkers>true</IncludeChapterMarkers>
<ChapterNames>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>1</ChapterNumber>
<Duration />
<ChapterName>00:00:00.000</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>2</ChapterNumber>
<Duration />
<ChapterName>00:03:43.723</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>3</ChapterNumber>
<Duration />
<ChapterName>00:10:31.756</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>4</ChapterNumber>
<Duration />
<ChapterName>00:13:25.847</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>5</ChapterNumber>
<Duration />
<ChapterName>00:17:38.641</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>6</ChapterNumber>
<Duration />
<ChapterName>00:19:35.841</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>7</ChapterNumber>
<Duration />
<ChapterName>00:25:12.302</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>8</ChapterNumber>
<Duration />
<ChapterName>00:28:01.305</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>9</ChapterNumber>
<Duration />
<ChapterName>00:35:09.065</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>10</ChapterNumber>
<Duration />
<ChapterName>00:43:07.084</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>11</ChapterNumber>
<Duration />
<ChapterName>00:49:29.592</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>12</ChapterNumber>
<Duration />
<ChapterName>00:52:14.214</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>13</ChapterNumber>
<Duration />
<ChapterName>00:59:24.978</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>14</ChapterNumber>
<Duration />
<ChapterName>01:02:53.728</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>15</ChapterNumber>
<Duration />
<ChapterName>01:15:50.921</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>16</ChapterNumber>
<Duration />
<ChapterName>01:21:28.801</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>17</ChapterNumber>
<Duration />
<ChapterName>01:24:23.183</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>18</ChapterNumber>
<Duration />
<ChapterName>01:31:45.875</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>19</ChapterNumber>
<Duration />
<ChapterName>01:35:52.664</ChapterName>
</ChapterMarker>
<ChapterMarker>
<IsNotifying>true</IsNotifying>
<ChapterNumber>20</ChapterNumber>
<Duration />
<ChapterName>01:44:06.282</ChapterName>
</ChapterMarker>
</ChapterNames>
<AdvancedEncoderOptions />
<VideoProfile>
<DisplayName>Auto</DisplayName>
<ShortName>auto</ShortName>
</VideoProfile>
<VideoLevel>
<DisplayName>Auto</DisplayName>
<ShortName>auto</ShortName>
</VideoLevel>
<VideoPreset>
<DisplayName>Fast</DisplayName>
<ShortName>fast</ShortName>
</VideoPreset>
<VideoTunes />
<ExtraAdvancedArguments>level=31</ExtraAdvancedArguments>
<MetaData />
<IsPreviewEncode>false</IsPreviewEncode>
<PreviewEncodeDuration xsi:nil="true" />
<PreviewEncodeStartAt xsi:nil="true" />
</Task>
<Configuration>
<IsDvdNavDisabled>true</IsDvdNavDisabled>
<EnableQuickSyncDecoding>false</EnableQuickSyncDecoding>
<UseQSVDecodeForNonQSVEnc>false</UseQSVDecodeForNonQSVEnc>
<ScalingMode>Lanczos</ScalingMode>
<PreviewScanCount>10</PreviewScanCount>
<Verbosity>2</Verbosity>
<MinScanDuration>5</MinScanDuration>
<SaveLogToCopyDirectory>false</SaveLogToCopyDirectory>
<SaveLogWithVideo>false</SaveLogWithVideo>
<SaveLogCopyDirectory />
<RemoteServiceEnabled>false</RemoteServiceEnabled>
<RemoteServicePort>8080</RemoteServicePort>
</Configuration>
<Statistics>
<IsNotifying>true</IsNotifying>
<StartTime>0001-01-01T00:00:00</StartTime>
<EndTime>0001-01-01T00:00:00</EndTime>
<FinalFileSize xsi:nil="true" />
</Statistics>
</QueueTask>
</ArrayOfQueueTask>
类似:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:mode on-match="TrackNumber = 1"/>
<xsl:template match="AudioTrack[ScannedTrack[Codec = (262144, 8192)]]/Encoder">
<xsl:delete>AudioTrack</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我的编码很差,但我也不知道如何为其余曲目运行 for 循环。
编辑:更正错误,修复 xml 文件
【问题讨论】:
-
这个还是蛮难理解的。您的 XML(您应该将其减少到证明问题所需的最低限度)的轨道编号为 1、2、1、1。此外,您制定条件的方式也是模棱两可的。
-
你的代码在哪里?照原样,这只是一个需求转储,它将照此关闭。
-
@michael.hor257k 修复了 TrackNumber 问题,现在是 1,2,3,4。 “删除
1 的 元素”不明确?这意味着删除整个 AudioTrack 元素和其中匹配/相关 TrackNumber 的所有节点。 -
@michael.hor257k 我也没有减少 XML,因为我之前在其他地方做了一个不同的问题,另一个用户建议我不应该这样做,因为我可能会在代码中进一步导致未实现的问题,所以最好保持完整。
-
@michael.hor257k 谢谢,我会看看这个。您能否也看到这个问题以了解类似但稍微困难的要求stackoverflow.com/questions/56268237 ?
标签: regex xml xslt cmd vbscript