Java 在Jsoup中解析html

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'

我试图在这里使用jsoup解析html标记。我是jsoup的新手。基本上,我需要解析这些标记,获取这些标记中的文本,并应用class属性中提到的样式

我正在创建一个SpannableStringBuilder,我可以创建子字符串,应用样式并将它们与没有样式的文本一起附加

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