我尝试使用Jsoup library
解析HTML标记。我想遍历所有元素。并将"\br"
替换为""
。我使用以下方法:
private void parseHtmlDoc(Document doc){
StringBuilder builder;
List<String> descriptionList=new ArrayList<String>();
builder=new StringBuilder();
Elements elementList=doc.getAllElements();
for(Element element:elementList){
if(element.equals(doc.select("\r\n"))){
builder.append(element.text());
builder.append("\n");
Log.d("HTML",builder.toString());
}
else if(element.equals(doc.select("<img>"))){
if(builder.length()!=0) {
String text = builder.toString();
descriptionList.add(text);
Log.d("HTML", text);
}
builder=new StringBuilder();
}
}
但我的应用程序正在崩溃:
for(Element element:elementList)
我在这里做错了什么......请帮我解决这个问题。
更新代码:
我将实现更改为以下代码:
Elements elements=doc.getElementsByTag("html");
for(Element element:elements){
Log.d("HTML",element.text());
}
现在,我正在获取元素中的所有标记。此元素包含内部标记,例如
,
&lt; \ n&gt; 。我想迭代每个标签并替换它们。我在这一点上陷入困境。我不知道如何从Html标签中获取子元素。
答案 0 :(得分:0)
我不确定我完全理解你要做什么,但也许这会给你一个大方向:
Document doc;
try {
doc = Jsoup.connect("https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br").get();
String htmlNoBr = doc.html().replaceAll("<br>", "");
System.out.println(htmlNoBr);
} catch (IOException e) {
e.printStackTrace();
}
上面的代码取代了所有&#34;&lt; BR&GT;&#34;在带有空字符串的html中出现,并将结果返回给htmlNoBr String对象。
如果你想要删除所有&#34;&lt; BR&GT;&#34;创建一个换行符,我假设你这样做。你应该忽略所有&#34;&lt; BR&GT;&#34;适用于白色的标签&#34;&lt;预&GT;&#34;像这样的标签:
private static final String PRE_TAG = "pre";
public static void parseHtmlDoc(Document doc) {
Elements elementList = doc.getAllElements();
for (Element element : elementList) {
//if the tag isn't <pre> add it to new elements collection
if(element.tag().toString().compareTo(PRE_TAG) != 0)
{
element.text(element.text().replaceAll("<br>", ""));
}
}
}
希望这会有所帮助。 此外,下次代码崩溃时,请将崩溃日志添加到您的问题中。
[更新] 要在评论中回答您的问题,这是您可以迭代所有元素及其子元素的一种方式:
public static void recurseOverElements(Elements elementList){
if(elementList.size() == 0)
return;
for (Element element : elementList) {
recurseOverElements(element.children());
System.out.println("element tag = " + element.tagName());
}
}
[更新2] 使用此代码调用函数:
public static void main(String[] args) {
Document doc;
try {
doc = Jsoup.connect("https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br").get();
//Create a new empty elements collection
Elements allElementsInDom = new Elements();
//send to a method that recurses over all child elements and adds them to the new collection
recurseOverElements(doc.getAllElements(), allElementsInDom);
//Iterate over all the elements and their child elements from the DOM
for (Element element : allElementsInDom) {
System.out.println(element.tagName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
这些是对上述方法所做的更改:
/*
* Iterates over all elements and child elements in elementList
* Returns allChildElemets collections with all nested elements
*/
public static Elements recurseOverElements(Elements elementList, Elements allChildElemets){
if(elementList.size() == 0)
return allChildElemets;
for (Element element : elementList) {
recurseOverElements(element.children(), allChildElemets);
allChildElemets.add(element);
}
return allChildElemets;
}
我不知道是否有更好的方法,但我就是这样做的。