【问题标题】:How to inject snippets of html into an string containing valid html?如何将 html 片段注入包含有效 html 的字符串中?
【发布时间】:2014-03-15 07:40:19
【问题描述】:

我有以下 html(为文学内容缩小了尺寸),它被传递到 java 方法中。

但是,我想把这个传入的 html 字符串添加一个

 标记,其中包含一些传入的文本,并在头部添加一个 

-- htmlString--

<html>
  <head>
  </head>
  <body>
  <body>
</html>

-- 新HTML字符串

<html>
  <head>
    <script type="text/javascript">
        window.onload=function(){alert("hello?";}
    </script>
  </head>
  <body>
     <div id="1">
        <pre>
          <!-- Inject textToInject here into a newly created pre tag-->
        </pre>
     </div>
  <body>
</html>

除了正则表达式之外,从 java 中执行此操作的最佳工具是什么?

【问题讨论】:

  • HTML 还是 XHTML?如果是后者,您可以使用标准 XML 库来执行此操作。
  • @nablex: html 但我认为其他类型的 xml 解析会起作用吗?也可能是 jsoup?

标签: java html xml jsoup


【解决方案1】:

以下是使用 Jsoup 的方法:

public String buildHTML(String htmlString, String textToInject)
{
    // Create a document from string
    Document doc = Jsoup.parse(htmlString);

    // create the script tag in head
    doc.head().appendElement("script")
            .attr("type", "text/javascript")
            .text("window.onload=function(){alert(\'hello?\';}");


    // Create div tag
    Element div = doc.body().appendElement("div").attr("id", "1");

    // Create pre tag
    Element pre = div.appendElement("pre");
    pre.text(textToInject);

    // Return as string
    return doc.toString();
}

我用过很多chaining,什么意思:

doc.body().appendElement(...).attr(...).text(...)

完全一样

Element example = doc.body().appendElement(...);
example.attr(...);
example.text(...);

示例:

final String html = "<html>\n"
        + "  <head>\n"
        + "  </head>\n"
        + "  <body>\n"
        + "  <body>\n"
        + "</html>";

String result = buildHTML(html, "This is a test.");

System.out.println(result);

结果:

<html>
 <head> 
  <script type="text/javascript">window.onload=function(){alert('hello?';}</script>
 </head> 
 <body>  
  <div id="1">
   <pre>This is a test.</pre>
  </div>
 </body>
</html>

【讨论】:

  • 这太棒了!我会试一试。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2019-05-02
相关资源
最近更新 更多