我有以下XML示例:
<Song FilePath="D:\Sync\DJ\Library2\Rudimental, Ella Eyre - Waiting All Night (feat. Ella Eyre).mp3" FileSize="11720042" Flag="25165826">
<Comment>(key shift) E7|Vm___|32b</Comment>
<Poi Name="E6|Vm___|32b" Pos="0.831464" Num="1" Color="4280869396" Type="cue" />
<Poi Name="E4|Vmk__|64b" Pos="28.259464" Num="2" Color="4280869396" Type="cue" />
<Poi Name="E2|Vm___|64b" Pos="170.888464" Num="3" Color="4294840954" Type="cue" />
<Poi Name="E7|Vm___|32b" Pos="280.602464" Num="4" Color="4294840954" Type="cue" />
<Poi Pos="0.458594" Type="automix" Point="realStart" />
<Poi Pos="11.80" Type="automix" Point="fadeStart" />
<Poi Name="E6|Vmk__|32b" Pos="11.802812" Num="-1" Color="4294934272" Type="cue" />
<Poi Pos="11.802812" Type="beatgrid" />
<Poi Pos="50.202268" Type="automix" Point="cutStart" />
<Poi Name="E7|VmKhb|96b" Pos="50.202813" Num="-1" Color="4294902015" Type="cue" />
<Poi Name="E7|VmKhb|128b" Pos="83.202812" Num="-1" Color="4288020735" Type="cue" />
<Poi Name="E7|VmKhb|128b" Pos="127.002812" Num="-1" Color="4294902015" Type="cue" />
<Poi Name="Break 1" Pos="170.885805" Type="remix" />
<Poi Name="E6|Vmk__|64b" Pos="192.831388" Num="-1" Color="4294934272" Type="cue" />
<Poi Name="End Break 1" Pos="194.209524" Type="remix" />
<Poi Name="E7|VmKhb|64b" Pos="214.774246" Num="-1" Color="4288020735" Type="cue" />
<Poi Name="E7|VmKhb|128b" Pos="236.717103" Num="-1" Color="4294902015" Type="cue" />
<Poi Pos="277.687438" Type="automix" Point="cutEnd" />
<Poi Pos="289.90" Type="automix" Point="fadeEnd" />
<Poi Pos="291.927075" Type="automix" Point="realEnd" />
</Song>
<Song FilePath="D:\Sync\DJ\Library2\Dennis Ferrer - Hey Hey (Riva Starr Paradise Garage Remix).mp3" FileSize="6295140" Flag="25165824">
<Poi Pos="0.011610" Type="automix" Point="realStart" />
<Poi Pos="0.011610" Type="automix" Point="fadeStart" />
<Poi Name="E6|_m_h_|16b" Pos="0.016599" Num="1" Color="4278255360" Type="cue" />
<Poi Pos="7.635646" Type="beatgrid" />
<Poi Name="E7|Vmkhb|64b" Pos="7.635646" Num="-1" Color="4288020735" Type="cue" />
<Poi Pos="8.587029" Type="automix" Point="cutStart" />
<Poi Pos="10.492608" Type="automix" Point="tempoStart" />
<Poi Name="E7|Vmkhb|96b" Pos="38.111837" Num="-1" Color="4294902015" Type="cue" />
<Poi Name="E7|_Mkhb|48b" Pos="83.826123" Num="-1" Color="4294934272" Type="cue" />
<Poi Name="E7|Vmkhb|32b" Pos="106.683266" Num="-1" Color="4288020735" Type="cue" />
<Poi Name="E7|Vmkh_|48b+E7|__kh_|16b" Pos="121.921361" Num="4" Color="4294901760" Type="cue" />
<Poi Pos="150.015420" Type="automix" Point="cutEnd" />
<Poi Pos="152.150" Type="automix" Point="fadeEnd" />
<Poi Pos="153.332971" Type="automix" Point="realEnd" />
<Poi Name="Break 1" Pos="121.444717" Type="remix" />
<Poi Name="End Break 1" Pos="144.777868" Type="remix" />
</Song>
我想将Num="-1“的所有实例替换为从9开始的编号值,在每个宋体的实例中从9重新开始。因此,结果如下:
<Song FilePath="D:\Sync\DJ\Library2\Rudimental, Ella Eyre - Waiting All Night (feat. Ella Eyre).mp3" FileSize="11720042" Flag="25165826">
<Comment>(key shift) E7|Vm___|32b</Comment>
<Poi Name="E6|Vm___|32b" Pos="0.831464" Num="1" Color="4280869396" Type="cue" />
<Poi Name="E4|Vmk__|64b" Pos="28.259464" Num="2" Color="4280869396" Type="cue" />
<Poi Name="E2|Vm___|64b" Pos="170.888464" Num="3" Color="4294840954" Type="cue" />
<Poi Name="E7|Vm___|32b" Pos="280.602464" Num="4" Color="4294840954" Type="cue" />
<Poi Pos="0.458594" Type="automix" Point="realStart" />
<Poi Pos="11.80" Type="automix" Point="fadeStart" />
<Poi Name="E6|Vmk__|32b" Pos="11.802812" Num="-1" Color="4294934272" Type="cue" />
<Poi Pos="11.802812" Type="beatgrid" />
<Poi Pos="50.202268" Type="automix" Point="cutStart" />
<Poi Name="E7|VmKhb|96b" Pos="50.202813" Num="9" Color="4294902015" Type="cue" />
<Poi Name="E7|VmKhb|128b" Pos="83.202812" Num="10" Color="4288020735" Type="cue" />
<Poi Name="E7|VmKhb|128b" Pos="127.002812" Num="11" Color="4294902015" Type="cue" />
<Poi Name="Break 1" Pos="170.885805" Type="remix" />
<Poi Name="E6|Vmk__|64b" Pos="192.831388" Num="12" Color="4294934272" Type="cue" />
<Poi Name="End Break 1" Pos="194.209524" Type="remix" />
<Poi Name="E7|VmKhb|64b" Pos="214.774246" Num="13" Color="4288020735" Type="cue" />
<Poi Name="E7|VmKhb|128b" Pos="236.717103" Num="14" Color="4294902015" Type="cue" />
<Poi Pos="277.687438" Type="automix" Point="cutEnd" />
<Poi Pos="289.90" Type="automix" Point="fadeEnd" />
<Poi Pos="291.927075" Type="automix" Point="realEnd" />
</Song>
<Song FilePath="D:\Sync\DJ\Library2\Dennis Ferrer - Hey Hey (Riva Starr Paradise Garage Remix).mp3" FileSize="6295140" Flag="25165824">
<Poi Pos="0.011610" Type="automix" Point="realStart" />
<Poi Pos="0.011610" Type="automix" Point="fadeStart" />
<Poi Name="E6|_m_h_|16b" Pos="0.016599" Num="1" Color="4278255360" Type="cue" />
<Poi Pos="7.635646" Type="beatgrid" />
<Poi Name="E7|Vmkhb|64b" Pos="7.635646" Num="9" Color="4288020735" Type="cue" />
<Poi Pos="8.587029" Type="automix" Point="cutStart" />
<Poi Pos="10.492608" Type="automix" Point="tempoStart" />
<Poi Name="E7|Vmkhb|96b" Pos="38.111837" Num="10" Color="4294902015" Type="cue" />
<Poi Name="E7|_Mkhb|48b" Pos="83.826123" Num="11" Color="4294934272" Type="cue" />
<Poi Name="E7|Vmkhb|32b" Pos="106.683266" Num="12" Color="4288020735" Type="cue" />
<Poi Name="E7|Vmkh_|48b+E7|__kh_|16b" Pos="121.921361" Num="4" Color="4294901760" Type="cue" />
<Poi Pos="150.015420" Type="automix" Point="cutEnd" />
<Poi Pos="152.150" Type="automix" Point="fadeEnd" />
<Poi Pos="153.332971" Type="automix" Point="realEnd" />
<Poi Name="Break 1" Pos="121.444717" Type="remix" />
<Poi Name="End Break 1" Pos="144.777868" Type="remix" />
</Song>
我不是开发人员,我更喜欢在Notepad++中使用Notepad++的解决方案
我能够使用Notepad++找到实例,但我不知道如何计数它们并通过增量值来替换它们。
非常感谢。
发布于 2022-06-19 21:47:00
在XSLT3.0中:
<xsl:transform version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="Poi/@Num[.='-1']">
<xsl:attribute name="Num">
<xsl:number select=".." level="single" count="Poi[@Num='-1']"
start-at="9"/>
</xsl:attribute>
</xsl:template>
</xsl:transform> 甚至不要考虑使用正则表达式。这份工作的工具不对。
若要与早期版本的XSLT一起使用:
(a)用标识模板规则替换xsl:mode声明
(b)修改xsl:number指令:(i)代替select属性,使用周围的xsl:for-each设置上下文项,(ii)代替start-at,在变量中捕获结果并向结果添加8。
https://stackoverflow.com/questions/72680243
复制相似问题