修改项目大于或小于整数的节点项目?
Amend node item where item is greater than or less than an integer?
我需要 output/amend 项 XML 其中一项
<TrackNumber>
匹配数字 2 之后(到无穷大)整数值
- 从 XML 读取的值大于、小于、小于或等于指定的整数值
条件:对于从 TrackNumber 2 开始(到无穷大)匹配的项目:
FOR <ScannedTrack>
WHERE <TrackNumber>2 (and onwards)
IF <Codec>2048</Codec>
AND <Bitrate> is <= LESS THAN OR EQUAL TO <Bitrate>192000</Bitrate>
OUTPUT/WRITE <Encoder> item as:
<Encoder>Ac3Passthrough</Encoder>
AND DELETE element/node <MixDown>
FOR <ScannedTrack>
<TrackNumber>2 (and onwards)
IF <Codec>2048</Codec> or <Codec>16777216</Codec> or <Codec>262144</Codec> or <Codec>8192</Codec> or <Codec>4444</Codec>
AND <Bitrate> is > GREATER THAN <Bitrate>192000</Bitrate>
OUTPUT/WRITE the following to each specific item:
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<Bitrate>192</Bitrate>
注意: 元素 <MixDown>, <Encoder> and <Bitrate>
已经包含现有值,因此 replace/overwrite 这些元素与上面显示的 output/write 值匹配条件。
有人可以帮助我编写脚本 - VBScript、XSLT 或 Batch with Regex 以帮助实现所需的输出吗?
我尝试使用下面的 XSL 样式表代码,但我认为我的一些语法不正确,需要一些帮助:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber = (>= '2')]">
<xsl:template match="AudioTrack[ScannedTrack[Codec = (2048)] and [Bitrate (<=192000)]/Encoder">
<xsl:copy>Ac3Passthrough</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber = (>= '2')]">
<xsl:template match="AudioTrack[ScannedTrack[Codec = (2048, 262144, 8192, 4444, 16777216)] and [Bitrate = (>192000)]/MixDown/Encoder/Bitrate">
<xsl:copy>Stereo</xsl:copy>
<xsl:copy>Ac3</xsl:copy>
<xsl:copy>192</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是要测试的示例 XML 文件:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<Task>
<AudioTracks>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>EAc3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>448</Bitrate>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>448000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>2</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>192000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>EAc3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>224</Bitrate>
<ScannedTrack>
<TrackNumber>3</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>128</Bitrate>
<ScannedTrack>
<TrackNumber>4</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>ffaac</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>256</Bitrate>
<ScannedTrack>
<TrackNumber>5</TrackNumber>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Lame</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>256</Bitrate>
<ScannedTrack>
<TrackNumber>6</TrackNumber>
<Description>English (DTS) (5.1 ch)</Description>
<Codec>8192</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>ffaac</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>160</Bitrate>
<ScannedTrack>
<TrackNumber>7</TrackNumber>
<Description>TrueHD 5.1</Description>
<Codec>4444</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
</Task>
</QueueTask>
</ArrayOfQueueTask>
这是应用转换后的预期输出 XML:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<Task>
<AudioTracks>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>EAc3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>448</Bitrate>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>448000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<Encoder>Ac3Passthrough</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>2</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>192000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>3</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>4</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>5</TrackNumber>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>6</TrackNumber>
<Description>English (DTS) (5.1 ch)</Description>
<Codec>8192</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>7</TrackNumber>
<Description>TrueHD 5.1</Description>
<Codec>4444</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
</Task>
</QueueTask>
</ArrayOfQueueTask>
原始XML文件的顺序:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<Task>
<AudioTracks>
<AudioTrack>
<IsNotifying>true</IsNotifying>
<DRC>0</DRC>
<Gain>0</Gain>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<SampleRate>0</SampleRate>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>448</Bitrate>
<Quality>-1</Quality>
<TrackName/>
<IsDefault>false</IsDefault>
<SampleRateDisplayValue>Auto</SampleRateDisplayValue>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Language>English</Language>
<LanguageCode>eng</LanguageCode>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<SampleRate>48000</SampleRate>
<Bitrate>224000</Bitrate>
<ChannelLayout>128000</ChannelLayout>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
</Task>
</QueueTask>
</ArrayOfQueueTask>
这很难,time-consuming 很难理解。 AFAICT,您想做的事:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and ScannedTrack/Codec = 2048 and ScannedTrack/Bitrate <= 192000]">
<xsl:copy>
<Encoder>Ac3Passthrough</Encoder>
<xsl:apply-templates select="*[not(self::MixDown or self::Encoder)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and (ScannedTrack/Codec = 2048 or ScannedTrack/Codec = 262144 or ScannedTrack/Codec = 8192 or ScannedTrack/Codec = 4444) and ScannedTrack/Bitrate > 192000]">
<xsl:copy>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<Bitrate>192</Bitrate>
<xsl:apply-templates select="*[not(self::MixDown or self::Encoder or self::Bitrate)]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
为回复您的评论而添加:
如果要保留 AudioTrack
下元素的原始顺序,请尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and ScannedTrack/Codec = 2048 and ScannedTrack/Bitrate <= 192000]">
<xsl:copy>
<xsl:apply-templates select="IsNotifying | DRC | Gain"/>
<Encoder>Ac3Passthrough</Encoder>
<xsl:apply-templates select="SampleRate | EncoderRateType | Bitrate | Quality | TrackName | IsDefault | SampleRateDisplayValue | ScannedTrack"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and (ScannedTrack/Codec = 2048 or ScannedTrack/Codec = 262144 or ScannedTrack/Codec = 8192 or ScannedTrack/Codec = 4444) and ScannedTrack/Bitrate > 192000]">
<xsl:copy>
<xsl:apply-templates select="IsNotifying | DRC | Gain"/>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<xsl:apply-templates select="SampleRate | EncoderRateType"/>
<Bitrate>192</Bitrate>
<xsl:apply-templates select="Quality | TrackName | IsDefault | SampleRateDisplayValue | ScannedTrack"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是假设原始顺序是:
- 正在通知
- 刚果民主共和国
- 获得
- 混音
- 编码器
- 采样率
- 编码器速率类型
- 比特率
- 质量
- 曲目名称
- 为默认值
- 采样率显示值
- 扫描轨迹
我需要 output/amend 项 XML 其中一项
<TrackNumber>
匹配数字 2 之后(到无穷大)整数值- 从 XML 读取的值大于、小于、小于或等于指定的整数值
条件:对于从 TrackNumber 2 开始(到无穷大)匹配的项目:
FOR <ScannedTrack>
WHERE <TrackNumber>2 (and onwards)
IF <Codec>2048</Codec>
AND <Bitrate> is <= LESS THAN OR EQUAL TO <Bitrate>192000</Bitrate>
OUTPUT/WRITE <Encoder> item as:
<Encoder>Ac3Passthrough</Encoder>
AND DELETE element/node <MixDown>
FOR <ScannedTrack>
<TrackNumber>2 (and onwards)
IF <Codec>2048</Codec> or <Codec>16777216</Codec> or <Codec>262144</Codec> or <Codec>8192</Codec> or <Codec>4444</Codec>
AND <Bitrate> is > GREATER THAN <Bitrate>192000</Bitrate>
OUTPUT/WRITE the following to each specific item:
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<Bitrate>192</Bitrate>
注意: 元素 <MixDown>, <Encoder> and <Bitrate>
已经包含现有值,因此 replace/overwrite 这些元素与上面显示的 output/write 值匹配条件。
有人可以帮助我编写脚本 - VBScript、XSLT 或 Batch with Regex 以帮助实现所需的输出吗?
我尝试使用下面的 XSL 样式表代码,但我认为我的一些语法不正确,需要一些帮助:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber = (>= '2')]">
<xsl:template match="AudioTrack[ScannedTrack[Codec = (2048)] and [Bitrate (<=192000)]/Encoder">
<xsl:copy>Ac3Passthrough</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber = (>= '2')]">
<xsl:template match="AudioTrack[ScannedTrack[Codec = (2048, 262144, 8192, 4444, 16777216)] and [Bitrate = (>192000)]/MixDown/Encoder/Bitrate">
<xsl:copy>Stereo</xsl:copy>
<xsl:copy>Ac3</xsl:copy>
<xsl:copy>192</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是要测试的示例 XML 文件:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<Task>
<AudioTracks>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>EAc3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>448</Bitrate>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>448000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>2</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>192000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>EAc3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>224</Bitrate>
<ScannedTrack>
<TrackNumber>3</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>128</Bitrate>
<ScannedTrack>
<TrackNumber>4</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>ffaac</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>256</Bitrate>
<ScannedTrack>
<TrackNumber>5</TrackNumber>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Lame</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>256</Bitrate>
<ScannedTrack>
<TrackNumber>6</TrackNumber>
<Description>English (DTS) (5.1 ch)</Description>
<Codec>8192</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>ffaac</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>160</Bitrate>
<ScannedTrack>
<TrackNumber>7</TrackNumber>
<Description>TrueHD 5.1</Description>
<Codec>4444</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
</Task>
</QueueTask>
</ArrayOfQueueTask>
这是应用转换后的预期输出 XML:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<Task>
<AudioTracks>
<AudioTrack>
<MixDown>5point1</MixDown>
<Encoder>EAc3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>448</Bitrate>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>448000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<Encoder>Ac3Passthrough</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>2</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>192000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>3</TrackNumber>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>4</TrackNumber>
<Description>English (AC3) (5.1 ch)</Description>
<Codec>2048</Codec>
<Bitrate>224000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>5</TrackNumber>
<Description>English (DTS-HD MA) (5.1 ch)</Description>
<Codec>262144</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>6</TrackNumber>
<Description>English (DTS) (5.1 ch)</Description>
<Codec>8192</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
<AudioTrack>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>192</Bitrate>
<ScannedTrack>
<TrackNumber>7</TrackNumber>
<Description>TrueHD 5.1</Description>
<Codec>4444</Codec>
<Bitrate>1536000</Bitrate>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
</Task>
</QueueTask>
</ArrayOfQueueTask>
原始XML文件的顺序:
<?xml version="1.0"?>
<ArrayOfQueueTask xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<QueueTask>
<Task>
<AudioTracks>
<AudioTrack>
<IsNotifying>true</IsNotifying>
<DRC>0</DRC>
<Gain>0</Gain>
<MixDown>5point1</MixDown>
<Encoder>Ac3</Encoder>
<SampleRate>0</SampleRate>
<EncoderRateType>Bitrate</EncoderRateType>
<Bitrate>448</Bitrate>
<Quality>-1</Quality>
<TrackName/>
<IsDefault>false</IsDefault>
<SampleRateDisplayValue>Auto</SampleRateDisplayValue>
<ScannedTrack>
<TrackNumber>1</TrackNumber>
<Language>English</Language>
<LanguageCode>eng</LanguageCode>
<Description>English (E-AC3) (5.1 ch)</Description>
<Codec>16777216</Codec>
<SampleRate>48000</SampleRate>
<Bitrate>224000</Bitrate>
<ChannelLayout>128000</ChannelLayout>
</ScannedTrack>
</AudioTrack>
</AudioTracks>
</Task>
</QueueTask>
</ArrayOfQueueTask>
这很难,time-consuming 很难理解。 AFAICT,您想做的事:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and ScannedTrack/Codec = 2048 and ScannedTrack/Bitrate <= 192000]">
<xsl:copy>
<Encoder>Ac3Passthrough</Encoder>
<xsl:apply-templates select="*[not(self::MixDown or self::Encoder)]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and (ScannedTrack/Codec = 2048 or ScannedTrack/Codec = 262144 or ScannedTrack/Codec = 8192 or ScannedTrack/Codec = 4444) and ScannedTrack/Bitrate > 192000]">
<xsl:copy>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<Bitrate>192</Bitrate>
<xsl:apply-templates select="*[not(self::MixDown or self::Encoder or self::Bitrate)]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
为回复您的评论而添加:
如果要保留 AudioTrack
下元素的原始顺序,请尝试:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and ScannedTrack/Codec = 2048 and ScannedTrack/Bitrate <= 192000]">
<xsl:copy>
<xsl:apply-templates select="IsNotifying | DRC | Gain"/>
<Encoder>Ac3Passthrough</Encoder>
<xsl:apply-templates select="SampleRate | EncoderRateType | Bitrate | Quality | TrackName | IsDefault | SampleRateDisplayValue | ScannedTrack"/>
</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack/TrackNumber > 1 and (ScannedTrack/Codec = 2048 or ScannedTrack/Codec = 262144 or ScannedTrack/Codec = 8192 or ScannedTrack/Codec = 4444) and ScannedTrack/Bitrate > 192000]">
<xsl:copy>
<xsl:apply-templates select="IsNotifying | DRC | Gain"/>
<MixDown>stereo</MixDown>
<Encoder>Ac3</Encoder>
<xsl:apply-templates select="SampleRate | EncoderRateType"/>
<Bitrate>192</Bitrate>
<xsl:apply-templates select="Quality | TrackName | IsDefault | SampleRateDisplayValue | ScannedTrack"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是假设原始顺序是:
- 正在通知
- 刚果民主共和国
- 获得
- 混音
- 编码器
- 采样率
- 编码器速率类型
- 比特率
- 质量
- 曲目名称
- 为默认值
- 采样率显示值
- 扫描轨迹