我正在使用 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 实现这一目标?如果没有关于如何解决这个问题的任何建议?
干杯
伊夫
更新:
@alamar
通过获取您的代码并对其进行一些编辑,我已经实现了我想要的,这就是我想出的:
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 之后添加。我已经尝试了一些东西,但似乎无法做到这一点,有人可以帮忙吗?
伊夫