Android Jsoup更改样式标记中的字体系列

Android Jsoup更改样式标记中的字体系列,android,jsoup,Android,Jsoup,在将html加载到WebView之后,我需要将字体族更改为自定义字体族。基本上我需要得到这个: <style> @font-face { font-family: 'MyFont'; src: url('file:///android_asset/Custom-Font.otf') } body { font-family: 'MyFont', serif; fo

在将html加载到WebView之后,我需要将字体族更改为自定义字体族。基本上我需要得到这个:

 <style>
            @font-face {
            font-family: 'MyFont';
            src: url('file:///android_asset/Custom-Font.otf')
            }
            body { font-family: 'MyFont', serif; font-size: 17px; color: #000; }
            a { color: #000; }
 </style>

@字体{
字体系列:“MyFont”;
src:url('file:///android_asset/Custom-Font.otf')
}
正文{字体系列:'MyFont',衬线;字体大小:17px;颜色:#000;}
a{color:#000;}


正文{字体系列:'Helvetica',衬线;字体大小:17px;颜色:#000;}
a{color:#000;}

Html是动态加载的,而不是从资源加载的。我使用Jsoup,但到目前为止无法获取此字体系列参数…

Jsoup不会为您解析CSS。它在一个
DataNode
中结束,挂起
style
元素。从那以后,你就可以自己解析了。如果您有一个简单的搜索和替换,您可以使用正则表达式来完成这项工作。对于复杂的情况,您可以查看[CSS解析器][1]。您的情况看起来相对简单,但仅给出一个示例,很难判断要保留哪些元素。这里是基本想法的草图,您可能需要修改以完全适合您的情况。基本思想是从
Style
标记中获取
DataNode
,并使用正则表达式搜索和替换字段

final String newFontInfo = "@font-face { \n"
        + "font-family: 'MyFont';\n"
        + "src: url('file:///android_asset/Custom-Font.otf')\n" + "}\n";
Elements styles = doc.select("style");
for (Element style : styles) {
    for (DataNode data : style.dataNodes()) {
        String dataTxt = data.getWholeData();
        if (dataTxt.contains("font-family")) {
             final String newData = dataTxt.replaceAll("font-family:\\s*'[^']*'","font-family: 'MyFont'");
             data.setWholeData(newFontInfo + newData);
        }
     }
 }

非常感谢,您能告诉我如何更改正则表达式字符串以匹配“word”吗?我不明白您想要什么,如果您想要匹配文字字符串“word”或任何已知字符串,您不需要正则表达式。如果你在寻找其他东西,你必须澄清。学习编写正则表达式在很多情况下都非常有用。查看
模式
,或者在web上搜索regex教程,这样您就可以在工具箱中找到它。
final String newFontInfo = "@font-face { \n"
        + "font-family: 'MyFont';\n"
        + "src: url('file:///android_asset/Custom-Font.otf')\n" + "}\n";
Elements styles = doc.select("style");
for (Element style : styles) {
    for (DataNode data : style.dataNodes()) {
        String dataTxt = data.getWholeData();
        if (dataTxt.contains("font-family")) {
             final String newData = dataTxt.replaceAll("font-family:\\s*'[^']*'","font-family: 'MyFont'");
             data.setWholeData(newFontInfo + newData);
        }
     }
 }