根据匹配条件将XML元素的内容从1修改为5?

时间:2019-05-23 04:50:29

标签: regex xml xslt cmd vbscript

此问题要求根据简单的匹配条件(匹配编号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文件,以便可以正确测试答案。

1 个答案:

答案 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>

由于您未能提供符合条件的任何样本数据,因此无法进行测试。