以下のように、Dom4j を使用してノードをデタッチしています。
<div name="divName">
Some Text Here
<span>Some Text Here</span>
</div>
名前で div ノードを選択し、detach メソッドを使用して削除しています。
xpathValue = "//*[contains(@name, 'divName')]"
xpath = dom.createXPath(xpathValue)
if xpath != None:
nodes = xpath.selectNodes(dom)
if len(nodes) > 0:
for node in nodes:
node.detach()
これはdivをうまく削除しているようですが、そのdiv内の要素とテキストも削除することに気付きました。私が達成しようとしているのは、div内の要素とテキストを削除せずにdivを削除することです。その結果、次のようになります。
Some Text Here
<span>Some Text Here</span>
dom4jでこれを達成することは可能ですか? これについての提案がない場合はどうすればよいですか?
乾杯
イーフ
アップデート:
@アラマー
あなたのコードを取得して少し編集することで、私が望んでいたことを達成しました。これが私が思いついたものです。
xpathValue = "//*[contains(@name, 'divName')]"
xpath = dom.createXPath(xpathValue)
if xpath != None:
nodes = xpath.selectNodes(dom)
if len(nodes) > 0:
for node in nodes:
parent = node.getParent()
nodeContents = node.content()
if len(nodeContents) > 0:
for subNode in nodeContents:
parent.add(subNode.clone().detach())
node.detach()
これは機能しているように見えますが、以下の状況では親ノードの最後にノードを追加します:
<div name="parent">
<div name="divName">
Some Text Here
<span>Some Text Here</span>
</div>
<div name="keep"></div>
</div>
結果は次のとおりです。
<div name="parent">
<div name="keep"></div>
Some Text Here
<span>Some Text Here</span>
</div>
「keep」という名前のdivの後に追加するのではなく、「keep」という名前のdivの前に、削除されたノードの内容を元の位置にとどめる方法を見つけようとしています。私はいくつかのことを試しましたが、これを達成できないようです。誰か助けてもらえますか?
イーフ