【问题标题】:Jsoup get text in paragraph and sub tagsJsoup 获取段落和子标签中的文本
【发布时间】:2018-03-30 12:44:30
【问题描述】:

我有一个 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 拉解析器

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。如果不是这种情况,有人可以提供帮助

【问题讨论】:

  • 可以在解析前对html进行操作,例如:String html = "&lt;h3&gt;Title &lt;u&gt;Page&lt;/u&gt; by Ada Lovelace&lt;/h3&gt;"; html = html.replace("&lt;u&gt;", "&lt;/h3&gt;&lt;u&gt;").replace("&lt;/u&gt;", "&lt;/u&gt;&lt;h3&gt;"); Elements elements = Jsoup.parse(html).getAllElements();
  • 嗨所以问题是我没有一些书籍作者制作的html。感谢您的帮助
  • 原始 HTML 对我来说似乎不是有效的 HTML。两个&lt;u&gt; 没有结束标签。您确定原始 HTML 不是 &lt;h3&gt;Title &lt;u&gt;Page&lt;/u&gt; by Ada Lovelace&lt;/h3&gt; 之类的吗?
  • 有任何答案解决了您的问题吗?如果是这样,请接受适当的答案,并将问题标记为已为他人解决。如果您发现一个有用的答案,请不要犹豫,为它投票。

标签: java android html jsoup


【解决方案1】:

我认为原来的 HTML 是&lt;h3&gt;Title &lt;u&gt;Page&lt;/u&gt; by Ada Lovelace&lt;/h3&gt;

如果是这种情况,您的 HTML 似乎格式正确。 Jsoup 允许读取每个 TextNode 的内容,因此您可以很好地将“Title”、“Page”和“by Ada Lovlace”读取为不同的字符串。

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

How to extract separate text nodes with Jsoup?

Jsoup - extracting text

【讨论】:

  • 好的,我会试一试。我必须做一些优先级更高的事情,所以我稍后会调查
猜你喜欢
  • 1970-01-01
  • 2017-12-26
  • 2021-09-13
  • 1970-01-01
  • 2013-05-22
  • 2022-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多