Я использую 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? Если нет каких-либо предложений о том, как пойти по этому поводу?
Приветствия
Eef
Обновление:
@ Аламар
Я достиг того, чего хотел, взяв ваш код и немного его отредактировав, и вот что я придумал:
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>
Я пытаюсь выяснить, как сделать так, чтобы содержимое удаленного узла оставалось в исходном положении до того, как div с именем «keep», вместо добавления после div с именем «keep». Я попробовал кое-что, но не могу этого достичь, кто-нибудь может помочь?
Eef