我想删除如下的整个 <direction>
标签,但是使用后面的代码, 只删除了自身所在标签
<direction placement="above">
<direction-type>
<rehearsal default-x="-20.55" relative-y="30.00" font-weight="bold" font-size="14">ABC</rehearsal>
</direction-type>
</direction>
$test = @'
<?xml version="1.0" encoding="UTF-8"?>
<score-partwise version="3.1">
<part id="P1">
<measure number="1" width="118.81">
<direction placement="above">
<direction-type>
<rehearsal default-x="-20.55" relative-y="30.00" font-weight="bold" font-size="14">ABC</rehearsal>
</direction-type>
</direction>
<direction placement="above">
<direction-type>
<rehearsal default-x="-40.55" relative-y="60.00" font-weight="bold" font-size="14">CDE</rehearsal>
</direction-type>
</direction>
</measure>
</part>
</score-partwise>
'@
[xml]$a = $test
$b = $a.SelectSingleNode("//direction-type/rehearsal[text()='ABC']")
if ($b)
{
$b.ParentNode.RemoveChild($b)
}
$a.save("ok.xml")
你的
xpath
本来就没有取对啊,你现在的xpath
语句是它表示在
direction-type
标签下,取text()
值为'ABC'
的rehearsal
子标签,而你期望的其实是取 包含text()
值为'ABC'
的rehearsal
孙子标签 的direction
标签,所以正确的路径是