我构建了一个使用saxon-he的xpath组件从html文档中提取数据的方法。我为此使用了w3c dom对象模型。
我已经创建了一个返回文本值的方法,类似于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作为String?我在文档中找不到任何相关内容。
只是为了澄清:我需要内部html(带或不带节点元素/标签)作为String。类似于http://api.jquery.com/html/或http://jsoup.org/apidocs/org/jsoup/nodes/Element.html#html--
答案 0 :(得分:1)
要使用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的树模型中,没有办法访问它。