Удалить текст из узла, но не из узлов-потомков - PullRequest
0 голосов
/ 29 октября 2019

У меня есть XML с данными HTML, и я пытаюсь удалить свободный текст из тега «Body», не удаляя содержимое дочернего тега «DIV». До сих пор я использовал removeChild (), который также удалял все остальное внутри BODY. Затем попытался получить NODE_TYPE == 3 для фильтрации и удаления только текстового содержимого, но я получаю NODE_TYPE == 1 при его запуске.

При использовании setTextContent () он устанавливает все данные тега для моей входной строки.

Вот как выглядит мой XML:

<?xml version="1.0" encoding="UTF-8"?>
<HTML>
    <HEAD>
        <META content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    </HEAD>
    <BODY>
        <DIV class="WordSection1">
        <P>Enter Text here</P> <P>COMPLETED</P>
        </DIV>
    TEXT I WANT TO REMOVE
    </BODY>
</HTML>

После изменений,Мне нужен вывод, как это:

<?xml version="1.0" encoding="UTF-8"?>
<HTML>
    <HEAD>
        <META content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    </HEAD>
    <BODY>
        <DIV class="WordSection1">
        <P>Enter Text here</P> <P>COMPLETED</P>
        </DIV>

    </BODY>
</HTML>

Есть предложения?

1 Ответ

0 голосов
/ 29 октября 2019

Я понимаю, что вы используете "старую" библиотеку org.w3c.dom, которая поставляется с Java. Предполагая, что вы читаете содержимое документа в Document doc, вы можете сделать:

Node textNode = doc.getDocumentElement().getLastChild().getPreviousSibling().getLastChild();
doc.getDocumentElement().getLastChild().getPreviousSibling().removeChild(textNode);

... хотя это не совсем надежно в отношении изменений во входном XML.

Возможно, вы захотите попробовать другой XML API (например, JDom). Старый часто не делает вашу жизнь очень легкой.

...