如何从 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的树模型中,没办法访问它。
我构建了一种方法,使用 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的树模型中,没办法访问它。