0

我有一个这样格式化的 html 文档:

<p>
 some plain text <em>some emphatized text</em>, <strong> some strong text</strong>
</p>
<p>
 just some plain text
</p>
<p>
  <strong>strong text </p> followed by plain, <a>with a link at the end!</a>
</p>

我想提取文本。使用类似解析器的dom,我可以提取每个段落

,但问题在里面:我也必须从内部标签中提取文本,并得到一个具有相同顺序的结果字符串,在上面的示例中,第一段,我想提取:

some plain text some emphatized text, some strong text

出于这个目的,我猜像 sax 这样的解析器会比 dom 更好,因为我不知道内部标签编号 o 序列:一个段落可以有零个或多个不同类型的内部标签。

4

3 回答 3

0

您可以使用 dom 解析器,将 p 标签(包括子 html 元素)内的文本放入字符串变量中,并使用其他一些功能从结果字符串中去除所有 html 标签。这应该让您拥有 p 标签之间的所有内容,而没有任何子元素标签。

例子

<p>
    some plain text <em>some emphatized text</em>, <strong> some strong text</strong>
</p>
<p>
    just some plain text
</p>
<p>
    <strong>strong text </p> followed by plain, <a>with a link at the end!</a>
</p>

使用一些 dom 解析器将 p 标记提取为字符串,然后您将拥有如下字符串:

String content = "some plain text <em>some emphatized text</em>, <strong> some strong text</strong>";
content = stripHtmlTags( content );
println( content ); // some plain text some emphatized text, some strong text
于 2012-09-08T10:40:06.633 回答
0

String extractText=Html.fromHtml(Your HTML String).toString()

这给了你提取的文本。希望这对你有帮助。

于 2012-09-08T11:12:31.217 回答
0
Add code to read CDATA by DOM pase
**childNode.getNodeType() == Node.CDATA_SECTION_NODE**

if Using XMLUtils modify like

public static String getNodeValue(Node node) {
        node.normalize();
        String response = node.getNodeValue();
        if (response != null) {
            return response;
        } else {
            NodeList list = node.getChildNodes();
            int size = list == null ? 0 : list.getLength();
            for (int j = 0; j < size; j++) {
                Node childNode = list.item(j);
                if (childNode.getNodeType() == Node.TEXT_NODE
                        || childNode.getNodeType() == Node.CDATA_SECTION_NODE) {
                    response = childNode.getNodeValue();
                    return response;
                }
            }
        }
        return "";
    }
于 2012-09-09T07:04:09.067 回答