Java 在Jsoup中解析html
我试图在这里使用jsoup解析html标记。我是jsoup的新手。基本上,我需要解析这些标记,获取这些标记中的文本,并应用class属性中提到的样式 我正在创建一个SpannableStringBuilder,我可以创建子字符串,应用样式并将它们与没有样式的文本一起附加Java 在Jsoup中解析html,java,android,jsoup,Java,Android,Jsoup,我试图在这里使用jsoup解析html标记。我是jsoup的新手。基本上,我需要解析这些标记,获取这些标记中的文本,并应用class属性中提到的样式 我正在创建一个SpannableStringBuilder,我可以创建子字符串,应用样式并将它们与没有样式的文本一起附加 String str = "There are <span class='newStyle'> two </span> workers from the <span class='oldStyle'
String str = "There are <span class='newStyle'> two </span> workers from the <span class='oldStyle'>Front of House</span>";
SpannableStringBuilder text = new SpannableStringBuilder();
if (value.contains("</span>")) {
Document document = Jsoup.parse(value);
Elements elements = document.getElementsByTag("span");
if (elements != null) {
int i = 0;
int start = 0;
for (Element ele : elements) {
String styleName = type + "." + ele.attr("class");
text.append(ele.text());
int style = context.getResources().getIdentifier(styleName, "style", context.getPackageName());
text.setSpan(new TextAppearanceSpan(context, style), start, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(ele.nextSibling().toString());
start = text.length();
i++;
}
}
return text;
}
String str=“房子前面有两个工人”;
SpannableStringBuilder text=新的SpannableStringBuilder();
if(value.contains(“”){
Document Document=Jsoup.parse(值);
Elements=document.getElementsByTag(“span”);
if(元素!=null){
int i=0;
int start=0;
用于(元素元素:元素){
字符串styleName=type+“+ele.attr(“类”);
text.append(ele.text());
int style=context.getResources().getIdentifier(styleName,“style”,context.getPackageName());
text.setSpan(新文本外观SPAN(上下文、样式)、开始、text.length()、Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(ele.nextSibling().toString());
开始=text.length();
i++;
}
}
返回文本;
}
我不确定如何解析不在任何标记之间的字符串,例如“There are”和“worker from the”
需要输出,例如:
- There are
- <span class='newStyle'> two </span>
- workers from the
- <span class='oldStyle'>Front of House</span>
-有
-两个
-来自美国的工人
-门面
完整答案:您可以通过获取childNodes()
来获取标记之外的文本。这样您就可以获得列表
。注意,我之所以选择body
,是因为您的HTML片段没有任何父元素,使用jsoup解析HTML片段会自动添加
和
。如果
Node
仅包含文本,则其类型为TextNode
,您可以使用toString()
获取内容否则,您可以将其强制转换为
元素
,并使用元素.text()
获取文本
顺便说一句:我不知道如何在
有之前消除第一个换行符,请看@KrystianG:谢谢。如何从一个节点获取剥离html的文本,如文本“two”?谢谢,我使用Parser.xmlParser来避免Jsoup添加的标记。
String str = "There are <span class='newStyle'> two </span> workers from the <span class='oldStyle'>Front of House</span>";
Document doc = Jsoup.parse(str);
Element body = doc.selectFirst("body");
List<Node> childNodes = body.childNodes();
for (int i = 0; i < childNodes.size(); i++) {
Node node = body.childNodes().get(i);
if (node instanceof TextNode) {
System.out.println(i + " -> " + node.toString());
} else {
Element element = (Element) node;
System.out.println(i + " -> " + element.text());
}
}
0 ->
There are
1 -> two
2 -> workers from the
3 -> Front of House