Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 是否根据匹配条件将XML元素内容从1修改为5?_Regex_Xml_Xslt_Cmd_Vbscript - Fatal编程技术网

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

Regex 是否根据匹配条件将XML元素内容从1修改为5?,regex,xml,xslt,cmd,vbscript,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</Enco

这个问题需要根据简单的匹配条件(匹配编号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>
用于
其中1或2或3或4或5
如果2048年
输出/写入
Ac3Passthrough
编辑
我简化了这个问题并简化了XML文件,以便正确地测试答案。

如果您想将XML转换为另一个XML,在根据条件转换某些节点时保持部分不变,那么可以使用标识转换模板启动XSLT(在XSLT3中,只需声明
,就可以方便地表达它),然后添加与要转换的节点匹配的模板,以便前三个条件可以转换为

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

AacPassthru
MP3Passthrool
穿越

无法测试这一点,因为您没有提供任何与您的条件匹配的样本数据。

那么,您在XSLT方面做了哪些尝试?为什么发布的样本XML不包含单个
65536
,例如,如果这是您说需要检查的值之一?通常,使用XSLT转换XM的某些部分L输入从标识转换模板开始,然后添加与要转换的节点匹配的模板。伪语法
AacPassthru
的确切含义是什么?是否存在需要转换为新值的现有
Encoder
元素?还是需要创建
Encoder
e作为某个元素的子元素具有该值的元素?具体在哪里?我想您确实需要将其分解为更小的任务,在这些任务中,您呈现一个XML样本,一个对呈现的XML样本有意义的条件,然后是该样本和条件所需的输出XML。上面在一组开括号和闭括号中显示的任何内容.g.AacPassthru或192000是实际正确的语法。如果您查看示例xml,第一个字符串显示Ac3,如果条件与上面的任何内容匹配,则将现有字符串(括号之间已存在的字符串)完全清除,并替换为与任何条件匹配的适用字符串,例如。“AacPassthru”如前所述。我发布的示例在
code=2222
表达式中使用整数文本,我看不出
Bitrate
有什么区别。而且我不确定我是否理解您的伪语法,XPath表达式比较运算符在“Bitrate”中描述"作为原始文件中的输入项读取。现在,中的这些项以纯文本/字符串的形式存储在xml中。我需要知道该数字是否小于、大于或等于中的数字,因此我认为要解决此问题,它必须是整数。好的,我已经指出了比较运算符列表,因此应该很清楚,您可以n write
Codec=2048和比特率