Android Jsoup在样式标记中更改font-family

时间:2013-01-15 15:06:47

标签: android jsoup

我需要在将html加载到WebView后将font-family更改为自定义系列。基本上我需要得到这个:

 <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>

来自

<style>
            body { font-family: 'Helvetica', serif; font-size: 17px; color: #000; }
            a { color: #000; }
</style>

Html是动态加载的,而不是来自资产。我使用Jsoup,但到目前为止无法获得这个font-family参数...

1 个答案:

答案 0 :(得分:1)

JSoup不会为您解析CSS。它最终以DataNode悬挂在style元素上。从那里开始,就解析而言,你是独立的。如果您有简单的搜索和替换,则可以使用正则表达式来完成工作。对于复杂的情况,你可以看一下[CSS Parser] [1]。你的情况看起来相对简单,但只给出一个例子,很难说你想要保留哪些元素。这是基本概念的草图,您可能需要修改以完全适合您的情况。基本思路是从DataNode标记中获取Style并使用正则表达式搜索并替换字段。

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);
        }
     }
 }