xpath文字列を使用してノードを削除するためにこのGroovyコードが機能していますが、xpathが複数のノードインスタンスになるノードの削除に問題があります。
サンプル XML...
<root>
<element1>foo</element1>
<element2>bar</element2>
<items>
<item>
<name>a</name>
<desc>b</desc>
<item>
<item>
<name>c</name>
<desc>x</desc>
</item>
</items>
</root>
ノードを削除するコード...
def resource = XmlSlurper().parseText(xml)
def xpathsToDelete = ['/root/element1','/root/items/item/name']
xpathsToDelete.each {
def pathTokens = it.path.tokenize '/'
def currentNode = resource
if ( currentNode.name() == pathTokens.first() ) {
def xpath = pathTokens.tail().join '/'
currentNode = currentNode."${xpath}"
currentNode.replaceNode{}
}
}
上記のコードは、単一のノードに評価されるelement1
xpath を使用してノードを削除します/root/element1
が、複数のノードに評価される場合は機能しません/root/items/name
。