【问题标题】:How to append HTML text to div tag in Java如何在 Java 中将 HTML 文本附加到 div 标签
【发布时间】:2015-12-05 22:00:46
【问题描述】:

我在 Java Selenium Webdriver 中动态生成 HTML 文件。 HTML 文件有两个 div 标签,每个标签都有自己唯一的 id 属性。

我想稍后在我的代码中根据它们的 id 将 HTML 文本动态添加到这些 div 标签中。

这可以实现吗?如果是的话,有人可以为我指出如何实现这一目标的正确方向吗?如果不是,有什么替代方法可以实现这一目标?

我正在努力解决这种情况。我确实需要能够根据 div 标签将数据动态附加到 HTML 页面。

提前致谢!

public void createsummaryfile(String report,String path) throws IOException{            
    File summary;       
    summary = new File(filepath);
    if(!summary.exists()){
        summary.createNewFile();
    }
    BufferedWriter bw = new BufferedWriter(new FileWriter(summary));
    bw.write("<!DOCTYPE html>");
    bw.write("<html><head><h1 align=center>EDC Reports Test Case Execution Summary</h1>");
    bw.write("<style>#report_table{height: 300px;left: 1em;position: relative;top: 5em;width: 300px;}#report{height: 300px;left: 20em;position: relative;top: -15em;width: 300px;}</style></head>");
    bw.write("<body><div id=report_table><table align=center border=1><tbody><tr><th>Report Name</th></tr></div>");
    bw.write("<body><div id=report_display></div>");
    bw.write("</html>");        
    bw.close();
}

public void populate_summary(String report,String path) throws IOException{     
    File summary_report = new File(filepath);
    BufferedWriter br = new BufferedWriter(new FileWriter(summary_report,true));        
    //Here I need to access the div tags by their id's and start appending data     
}

【问题讨论】:

  • 你需要展示你到目前为止所做的事情。
  • 到目前为止,我在 Java 中有两种方法,一种方法是创建具有基本布局的 HTML 文件,第二种方法是动态地将数据附加到该 HTML 文件中。我想了解我是否可以以某种方式访问​​具有唯一 ID 的第二种方法中的 div 标签,并开始在该 div 标签中附加数据或其他标签。
  • @jgabb 请参考上面的代码sn -p
  • 这与 Selenium 无关!您需要 Google 如何正确编写 XML 文件 - HTML 是 XML 的超集。

标签: java html selenium selenium-webdriver


【解决方案1】:

通过创建和搜索 DOM 树,可以在 HTML 文档中找到具有特定 ID 的 div-tag。

首先你需要为你的文档创建一个 DOM 表示:

public static String addToDivWithID(String htmlDocPath, String divID, String dataToAppend)
        throws ParserConfigurationException, IOException, SAXException, TransformerException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(htmlDocPath);

    Element elementWithID = findDiv(divID, doc.getDocumentElement());

    Element contentToAppend = builder
            .parse(new ByteArrayInputStream(dataToAppend.getBytes()))
            .getDocumentElement();

    elementWithID.appendChild(contentToAppend);

    return domToString(doc);
}

在本例中,我使用此方法查找所需的div-元素: 它正在执行递归查找(实现可能看起来更好一些)

public static Element findDiv(String id, Element element) {

    if( id.equals(element.getAttribute("id")) ) {
        return element;
    }

    NodeList innerDivs = element.getElementsByTagName("div");

    for(int i = 0; i < innerDivs.getLength(); i++) {
        Element current = (Element) innerDivs.item(i);

        if( id.equals(current.getAttribute("id")) ) {
            return current;
        }

        Element possibleChildWithID = findDiv(id, current);

        if(possibleChildWithID != null) {
            return possibleChildWithID;
        }
    }

    return null;
}

找到正确的元素后,您可以使用这些行添加新内容(已经在第一种方法中):

Element contentToAppend = builder
            .parse(new ByteArrayInputStream(dataToAppend.getBytes()))
            .getDocumentElement();

您可以找到有关将 XML 字符串附加到 DOM 元素 here 的更多信息。

然后,您必须以这种方式将您的 DOM 文档转换回其字符串表示形式:

public static String domToString(Document doc) throws TransformerException {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    StringWriter writer = new StringWriter();
    transformer.transform(new DOMSource(doc), new StreamResult(writer));
    String output = writer.getBuffer().toString().replaceAll("\n|\r", "");

    return output;
}

有关将 DOM 文档转换为字符串 here 的更多信息。

最后,我个人关心的是,您不应该以这种方式处理您的 HTML 文档! 如果要在特定的 div 中添加内容,请在服务器端使用 JSP,如下所示:

<html>
    <body>
        <div id="first">
            <%
                String first = Foo.getFirstDivStuff();
            %>
            <%= first %>
        </div>
        <div id="second">
            <%
                String second = Foo.getSecondDivStuff();
            %>
            <%= second %>
        </div>
    </body>
</html>

如果您想修改已经到达客户端的 HTML 内容,请在服务器上使用 AJAX 和适当的 JSP 或 Servlet。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多