Jsoup在段落和子标签中获取文本

时间:2018-03-29 06:09:06

标签: java android html jsoup

我有一个我希望运行的HTML页面"专门的" TTS:

例如:

<h3>Title <u>Page<u> by Ada Lovelace</h3>

我想以不同的方式阅读标题和页面:

当我使用时:

    Element body=doc.body();
    Elements elements= body.select("*");
    for(Element element:elements){
        if(!element.ownText().equals("") && element.hasText()){
            Log.d("Epub",element.tagName()+" "+element.ownText());

        }
    }

我将日志输出视为:

h3 Title by Ada Lovelace

u Page

我想将数据作为:

h3 Title

u Page

h3 by Ada Lovelace 

我无权访问HTML文件

提前感谢任何帮助!

[编辑]

嘿所以我找到了一种方法,但我没有使用Jsoup,而是使用了XML pull解析器

private ArrayList<String> stackOfTags=new ArrayList<String>();
private int indexOfTags=-1;

private void prepareTextToSpeech__onHold() {
    String opening_tag="";
    try{
        XmlPullParser parser=prepareText__onHold();
        int eventType=parser.getEventType();
        while (eventType!=XmlPullParser.END_DOCUMENT){
            switch (eventType){
                case XmlPullParser.START_TAG:
                    opening_tag=parser.getName();
                    stackOfTags.add(parser.getName());
                    indexOfTags++;
                    break;
                case XmlPullParser.TEXT:
                    String temp=parser.getText();
                    if(temp.matches(".*[a-zA-Z]+.*") && !opening_tag.equals("script")){
                        contentMap.addItemInMap(opening_tag,parser.getText());
                        Log.d("Epub",stackOfTags.get(indexOfTags)+" "+parser.getText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    stackOfTags.remove(indexOfTags);
                    indexOfTags--;
                    break;
            }
            eventType=parser.next();
        }
    }catch (Exception e){
        Log.d("Epub",e.getMessage());
    }

}

然而,这仅适用于格式良好的HTML。如果不是这种情况可以有人帮助

1 个答案:

答案 0 :(得分:0)

我认为原始HTML是<h3>Title <u>Page</u> by Ada Lovelace</h3>

如果是这种情况,您的HTML似乎格式正确。 Jsoup允许读取每个TextNode的内容,因此您可以读出&#34; Title&#34;,&#34; Page&#34;和#34;作者:Ada Lovlace&#34;作为不同的字串。

我现在没有正在运行的Java环境,因此我无法提供正常工作的代码,但这里有一个指向源代码的指针,告诉您它是如何完成的:

How to extract separate text nodes with Jsoup?

Jsoup - extracting text