从节点而不是后代节点中删除文本

问题描述 投票:0回答:2

我有一个带有HTML数据的XML,并尝试删除'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>

有什么建议吗?

java html dom domparser
2个回答
0
投票

我了解您使用的是Java随附的org.w3c.dom旧库。假设您将文档内容读入文档doc,则可以执行以下操作:

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

...尽管就输入XML的更改而言,这不是很可靠。

您可能要尝试使用其他XML API(例如JDom)。旧的常常使您的生活变得不那么轻松。


0
投票

这是jardocumentation页面。

import Torello.HTML.*;
import Torello.HTML.NodeSearch.*;
import Torello.Java.FileRW;

import java.util.*;
import java.net.URL;
import java.io.IOException;

public class SO
{
    public static void main(String[] argv) throws IOException
    {
        String s = FileRW.loadFileToString("SO-Input.html");
        Vector page = HTMLPage.getPageTokens(s, false);
        // CN_CI "Contains Case Insensitive"
        TextNodeRemove.all(page, TextComparitor.CN_CI, "TEXT I WANT TO REMOVE");
        FileRW.writeFile(Util.pageToString(page), "SO-Output.html");
    }
}

这将产生下面的文件。请注意,如果要在文本周围保留空白,这很容易,但是我需要发布其他答案。此版本将删除包含您的字符串的整个textnode。

<?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>
© www.soinside.com 2019 - 2024. All rights reserved.