只有当我抓住Name =“Mario Rossi”时,我该怎样才能取代这个值?
我需要用98代替94
<PMRQ:Name>John Smith</PMRQ:Name>
<PMRQ:PmtId>
<PMRQ:InstrId>95</PMRQ:InstrId>
<PMRQ:EndToEndId>45700100523011712061901541</PMRQ:EndToEndId>
</PMRQ:PmtId>
<PMRQ:Name>Mario Rossi</PMRQ:Name>
<PMRQ:PmtId>
<PMRQ:InstrId>94</PMRQ:InstrId>
<PMRQ:EndToEndId>45700100522011712061901541</PMRQ:EndToEndId>
</PMRQ:PmtId>
感谢帮助!!
例如,在xsh你可以写
open file.xml ;
for //PMRQ:Name[.="Mario Rossi"]
set following-sibling::PMRQ:PmtId[1]/PMRQ:InstrId 98 ;
save :b ;
这是有效的,不需要额外的模块。
假设$ text包含您要修改的多行数据。然后就做:
$text=~s/<PMRQ:Name>Mario Rossi<\/PMRQ:Name>\s*<PMRQ:PmtId>\s*<PMRQ:InstrId>\K\d+/98/msg;
最后需要'g'(全局)修饰符来执行多个匹配(但如果你有零个或一个匹配则不会受到伤害)。