【问题标题】:How to Strip Out the Text From And Html String in Java如何在 Java 中从和 Html 字符串中去除文本
【发布时间】:2012-12-18 15:25:18
【问题描述】:

我想分析html页面的结构。对于一个页面,我将它作为一个字符串,我想去掉文本并只保留 html 结构。我不想使用 DOM 解析器,我需要一些健壮的东西,它不仅适用于 xhtml,而且适用于常规 html。我知道正则表达式足以从字符串中去除 html 标签,但是它们可以用来去除文本并只保留 html 标签吗?

您知道我可以使用的任何其他选项/框架吗?

【问题讨论】:

  • 我肯定会使用 DOM 解析器...
  • 我想避免 DOM 解析的原因是我想将生成的 html 用作字符串而不是 DOM。但是,我可以使用 DOM 解析器来剥离文本,然后将其作为字符串获取。这也有效,我只想知道我还有哪些其他选择。

标签: java html string parsing


【解决方案1】:

我怀疑使用正则表达式是否有一种简单的方法。

Jericho 是一个非常简洁的 HTML 解析器,占用空间小,只有一个 jar,无需额外的外部库。

【讨论】:

  • 我以前一直在使用 Jericho,我尝试过我的特定任务,但它似乎不太适合更改 html 结构。例如,您需要一个特殊的 TextExtractor 类来访问 html 标签中的文本。似乎很难删除每个节点中的文本,因为似乎不存在任何更改内部 html 的方法。我应该尝试一下 JSoup,它似乎更适合我的目的。
【解决方案2】:

您知道我可以使用的任何其他选项/框架吗?

您可能想查看JSoup。似乎旨在解决这类问题。

【讨论】:

    【解决方案3】:

    如果您以前删除过标签,您就知道基本要点是删除 之间的所有内容。去除文本非常相似,只是你去除了 > 和

    【讨论】:

      【解决方案4】:

      这可能会给你一个不错的开始。我对HTML没有太多经验,所以我不知道除了之外是否还有其他东西可以解析出来。

      public static void main(String[] args){
          String html = "<body> text text text text </body>";
          String htmlTags = null;
          char c;
          for(int i = 0 ; i < html.length() ; i++){
              c = html.charAt(i);
              if(tagStart(Character.toString(c))){
                  for(int j = i ; j < html.length() ; j++){
                      if(htmlTags != null){
                          htmlTags += Character.toString(html.charAt(j));
                      }else{
                          htmlTags = Character.toString(html.charAt(j));
                      }
                      c = html.charAt(j);
                      if(tagStop(Character.toString(c))){
                          break;
                      }
                  }
              }
          }
      }
      
      private static boolean tagStart(String check){
          if(check.equals("<")){
              return true;
          }else{
              return false;
          }
      }
      
      private static boolean tagStop(String check){
          if(check.equals(">")){
              return true;
          }else{
              return false;
          }
      }
      

      【讨论】:

      • 如果我没有其他可靠的方法,这是一个好的开始。有一些事情我会尝试 DOM 或任何其他解析器/库,甚至是直接解析之前的正则表达式。首先,我必须将包含的“文本”保留在
      【解决方案5】:

      类似的东西:

      pageSource.replaceAll(">.*<", "><");
      

      应该让你开始。

      【讨论】:

        猜你喜欢
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        • 2012-08-07
        • 2010-10-21
        • 2010-11-23
        相关资源
        最近更新 更多