gpt4 book ai didi

java - 如何在 Java 中将 HTML 文本附加到 div 标签

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:50 25 4
gpt4 key购买 nike

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

我想在稍后的代码中根据这些 div 标签的 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
}

最佳答案

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

首先,您需要创建文档的 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。

关于java - 如何在 Java 中将 HTML 文本附加到 div 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com