如何从 java 中的 org.w3c.dom.Node 获取 html?

How to get html from a org.w3c.dom.Node in java?

我构建了一种方法,使用 saxon-he 的 xpath 组件从 html 文档中提取数据。为此,我正在使用 w3c dom 对象模型。

我已经创建了一个 returns 文本值的方法,类似于 jsoup (jsoupElement.text()) 中的文本值方法:

    protected String getNodeValue(Node node) {
    NodeList childNodes = node.getChildNodes();
    for (int x = 0; x < childNodes.getLength(); x++) {
        Node data = childNodes.item(x);
        if (data.getNodeType() == Node.TEXT_NODE)
            return data.getNodeValue();
    }
    return "";
 }

这工作正常,但我现在需要选定节点的基础 html(使用 jsoup 它将是 jsoupElement.html())。使用 w3c dom 对象模型我有 org.w3c.dom.Node。我如何从 org.w3c.dom.Node 中获取 html 作为字符串?我在文档中找不到与此相关的任何内容。

澄清一下:我需要内部 html(有或没有节点 element/tag)作为字符串。类似于 http://api.jquery.com/html/ or http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#html--

要使用 Saxon 将 W3C DOM Node 的子节点序列化为 HTML,您可以使用默认的 Transformer,将输出方法设置为 html:

public static String getInnerHTML(Node node) throws TransformerConfigurationException, TransformerException
{
    StringWriter sw = new StringWriter();
    Result result = new StreamResult(sw);
    TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
    Transformer proc = factory.newTransformer();
    proc.setOutputProperty(OutputKeys.METHOD, "html");
    for (int i = 0; i < node.getChildNodes().getLength(); i++)
    {
        proc.transform(new DOMSource(node.getChildNodes().item(i)), result);
    }
    return sw.toString();
}

但是如前所述,这是树的序列化,原来XML或HTML并没有存储在DOM树或Saxon的树模型中,没办法访问它。