簡體   English   中英

在 Jsoup 中解析 html

[英]Parsing html in Jsoup

我試圖在這里使用 jsoup 解析 html 標簽。 我是 jsoup 的新手。 基本上我需要解析標簽並獲取這些標簽中的文本並應用類屬性中提到的樣式。

我正在創建一個 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;
    }

我不確定如何解析不在任何標簽之間的字符串,例如“There are”和“worker from the”。

需要輸出如:

- There are
- <span class='newStyle'> two </span>
- workers from the
- <span class='oldStyle'>Front of House</span>

完整答案:您可以通過獲取childNodes()來獲取標簽之外的文本。 這樣您就可以獲得List<Node> 注意我選擇body是因為您的 HTML 片段沒有任何父元素,並且使用 jsoup 解析 HTML 片段會自動添加<html><body>
如果Node僅包含文本,則它是TextNode類型,您可以使用toString()獲取內容。
否則,您可以將其轉換為Element並使用element.text()獲取文本。

    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

順便說一句:我不知道如何在There are之前擺脫第一個換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM