【发布时间】: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 = "<h3>Title <u>Page</u> by Ada Lovelace</h3>"; html = html.replace("<u>", "</h3><u>").replace("</u>", "</u><h3>"); Elements elements = Jsoup.parse(html).getAllElements(); -
嗨所以问题是我没有一些书籍作者制作的html。感谢您的帮助
-
原始 HTML 对我来说似乎不是有效的 HTML。两个
<u>没有结束标签。您确定原始 HTML 不是<h3>Title <u>Page</u> by Ada Lovelace</h3>之类的吗? -
有任何答案解决了您的问题吗?如果是这样,请接受适当的答案,并将问题标记为已为他人解决。如果您发现一个有用的答案,请不要犹豫,为它投票。