我有一个以这种方式格式化的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更好,因为我不知道内部标签的数字序列:一个段落可以有零个或多个不同类型的内部标签。
答案 0 :(得分: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
答案 1 :(得分:0)
String extractedText = Html.fromHtml(您的HTML字符串).toString()
这给你提取的文字.. 希望这能帮助你。
答案 2 :(得分: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 "";
}