2

我有一个 HTML 文档存储在我的 java 应用程序的内存中(在 Flying Saucer XHTMLPanel 上设置)。

xhtmlPanel.setDocument(Main.class.getResource("/mailtemplate/DefaultMail.html").toString());

html文件如下;

<html>
    <head>
    </head>
    <body>
        <p id="first"></p>
        <p id="second"></p>
    </body>
</html>

我想设置元素的内容p。我不想为其设置架构以使用 getDocumentById(),那么我有什么替代方案?

4

2 回答 2

3

XHTML 是 XML,所以我推荐任何 XML 解析器。我维护JDOM 库,所以自然会推荐使用它,但其他库,包括 Java 中的嵌入式 DOM 模型也可以使用。我会使用类似的东西:

    Document doc = new SAXBuilder().build(Main.class.getResource("/mailtemplate/DefaultMail.html"));

    // XPath that finds the `p` element with id="first"
    XPathExpression<Element> xpe = XPathFactory.instance().compile(
            "//p[@id='first']", Filters.element());
    Element p = xpe.evaluateFirst(doc);

    p.setText("This is my text");

    XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat());
    xout.output(doc, System.out);

产生以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<html>
  <head />
  <body>
    <p id="first">This is my text</p>
    <p id="second" />
  </body>
</html>
于 2013-11-01T16:47:36.587 回答
1

使用精细分级的 Html 解析器和操作库,如jsoup. Document您可以通过传递htmltojsoup.parse(String htmlContent)函数轻松地创建一个。这个库允许所有的 DOM 操作功能,包括 CSS 或类似 jquery 的选择器语法。doc.selct(String selector), 其中doc是 的一个实例Document

例如,您可以选择第一个p使用doc.select("p").first(). 一个最小的工作解决方案是:

Document doc = jsoup.parse(htmlContent);
Element p = doc.select("p").first();
p.text("My Example Text");

参考:

  1. 使用选择器语法查找元素
于 2013-11-01T17:00:55.087 回答