此问题要求根据简单的匹配条件(匹配编号1)替换XML中的值。
条件:对于匹配TrackNumber 1至5)的项目:
FOR <ScannedTrack>
WHERE <TrackNumber>1 or 2 or 3 or 4 or 5
IF <Codec>2048</Codec>
OUTPUT/WRITE
<Encoder>Ac3Passthrough</Encoder>
我简化了这个问题,并简化了XML文件,以便可以正确测试答案。
答案 0 :(得分:1)
如果您想将XML转换为另一个XML,而在其中保留部分不变的同时根据条件转换某些节点,则可以使用身份转换模板启动XSLT(在XSLT 3中可以通过声明<xsl:mode on-no-match="shallow-copy"/>
来方便地表示该模板) ),然后添加与您要转换的节点匹配的模板,以便您的前三个条件可以转换为
<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-no-match="shallow-copy"/>
<xsl:template match="AudioTrack[ScannedTrack[Codec = (65536, 1111)]]/Encoder">
<xsl:copy>AacPassthru</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack[Codec = 2222]]/Encoder">
<xsl:copy>Mp3PassthruEncoderTool</xsl:copy>
</xsl:template>
<xsl:template match="AudioTrack[ScannedTrack[Codec = 3333]]/Encoder">
<xsl:copy>Passthrough</xsl:copy>
</xsl:template>
</xsl:stylesheet>
由于您未能提供符合条件的任何样本数据,因此无法进行测试。