【问题标题】:Android: Replacing HTML tags in WebViewAndroid:替换 WebView 中的 HTML 标签
【发布时间】:2011-03-06 17:13:50
【问题描述】:

我的 android 应用程序下载使用 HTML 标记格式化的文章并将它们显示在 WebView 中。我遇到的问题是某些文章具有自动生成的图表,这些图表非常大,并且不适合 web 视图。 (请注意,我不想使用水平滚动)。 我的想法是保存包含此类图形的“div”标签的每次出现,然后将其替换为"<a href='unique_id_of_div_tag'>Show graph</a>" 链接。 有这样的东西将显示链接而不是图表。当用户点击它时,它将打开带有图形的新活动。(我将使用 WebViewClient 和 shouldOverrideUrlLoading 方法处理用户点击)

包含grap信息的'div'标签的结构类似于以下:

<div class="graph">
   <div>Header</div>
   <div>Graph body</div>
   <div>Graph footer</div>
</div>

(我无法控制它)

总而言之,我希望能够保存&lt;div class="graph"&gt;...&lt;/div&gt; 的内容并将其替换为&lt;a href=""&gt;...&lt;/a&gt;。我怎样才能做到这一点?

谢谢, 商标

【问题讨论】:

    标签: android tags replace webview


    【解决方案1】:

    这可以通过以下方式完成:

    Pattern tags = Pattern.compile ("</?[^>]+>");
    Matcher match = tags.matcher (yourContent); // here you specify the string you want to modify (HTML)
    String result = match.replaceAll("");
    

    这样可以删除所有标签,但将内容保留在 HTML 字符串中。

    阅读更多关于模式和匹配器的信息here

    编辑:

    要从字符串中仅删除链接(锚点),请编写以下内容而不是第一行:

    Pattern tags = Pattern.compile ("</?[a]{1}[^>]+>");
    

    您可以通过将正则表达式替换为另一个字符串来删除任意字符串。

    编辑2:

    我完全误解了你的问题。两次:)

    您可以删除所有&lt;div class="graph"&gt; 标签,方法如下:

        Pattern tags = Pattern.compile ("<div class=\"graph\">[^(</div>)]+</div>");
    

    然后,将所有那些 [[DIV]] 占位符替换为您想要的任何内容。但是,如果您有一个带有图表的 div 和其中的一些内容,则这种方法将不起作用。因此,在这种情况下,我认为最好将您的所有内容拆分到 &lt;div class=graph&gt; 上,然后检查每个元素内的每个 DIV 以检查其中是否有图表。

    我不知道这是否可以单独使用正则表达式来完成,因此必须采用更繁琐且容易出错的方法。但你确实想要一些非常具体的东西,所以有时你应该期待它:)

    【讨论】:

    • 谢谢,但这将删除每个
      标记,这将破坏所有图表。从整个 HTML 正文中,我只想用 链接替换那些 div 标签 - 我该怎么做?
    • @marqss,请参阅我的评论。我希望其中没有奇怪的错误(未经测试):P
    • 再次感谢!但是我不确定这是否可行。您的模式将从字符串中删除锚点。我必须删除 div(但首先保存它们的值),我知道我可以通过更新您的模式来做到这一点,但是我保存图形数据的 div 也有子 div,这不起作用。你怎么看?
    • @Shade,非常感谢!我来这里是为了删除超链接。但是,您第二次删除超链接的编辑只删除了开始标签。为了使它也删除结束标签,它需要是:&lt;/?[a]{1}[^&gt;]*&gt;
    • @Shade 也是,如果你想防止匹配以 'a' 开头的其他标签(例如 XML 中的 &lt;apple&gt;Golden Delicious&lt;/apple&gt; 之类的东西),那么我认为这应该可以工作:&lt;/?([a](?=\s|&gt;)){1}[^&gt;]*&gt;
    【解决方案2】:

    对 Android 或 Java 不是很熟悉,但是从纯 html/js 的角度来看,您能否在将 HTML 显示在 WebView 中之前对其进行一些预处理?例如,如果您提前知道图形 html 会是什么样子,您就不能将其隐藏在 html 中,并在其前面插入一个锚标记并使用 javascript 显示它吗?

    我不知道在 Android 中处理或查找/插入字符串的代码,但是您实际向用户显示的结果 HTML 可能是这样的,带有“display:none;”添加到图形的封闭div中:

    链接会找到在其 href 中引用的元素,然后显示它。

    <a href="#div-of-graph" onclick="document.getElementById(this.href.substring(this.href.indexOf('#')+1)).style.display='block';return false;">show</a>
    <div id="div-of-graph" style="display:none;"><img src="the-graph.gif" /></div>
    

    【讨论】:

    • 问题是我不想在 web 视图中显示该图。我希望能够将“div”元素保存在 String 变量中,然后将其显示在其他地方(在另一个 web 视图中)...
    • 啊。你是生成 html 内容的人吗?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签