在java中是否有与python函数lmxl.sax.saxify
[1]类似的函数来从DOM生成SAX事件并针对SAX ContentHandler触发它们。
主要目的是将DOM对象转换为段落列表。
给出这个html片段
<p> Here is a text!
<ul><li>list1</li><li>list2</li></ul>
</p>
我想要的输出是:
答案 0 :(得分:0)
是的,您可以使用DOMSource和SAXResult运行转换,请参阅http://www.java2s.com/Code/Java/XML/GeneratingSAXParsingEventsbyTraversingaDOMDocument.htm:
Source source = new DOMSource(doc);
URI uri = new File("infilename.xml").toURI();
source.setSystemId(uri.toString());
DefaultHandler handler = new MyHandler();
SAXResult result = new SAXResult(handler);
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result);
但为什么不从DOM本身提取您想要的信息呢?
答案 1 :(得分:0)
如果要从DOM文档中检索所有文本节点(这是与原始文档不同的问题),那么Xpath是从DOM文档中搜索和提取数据的最简单(也是最有效)的方法
以下是您需要的代码:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("/path/example.html");
XPath xPath = XPathFactory.newInstance().newXPath();
String pattern = "//*/text()"; // retrieve all text nodes in the doc
NodeList nl = (NodeList)xPath.compile(pattern)
.evaluate(doc, XPathConstants.NODESET);
for (int i = 0; i < nl.getLength() ; i++) {
Node n = nl.item(i);
String text = n.getNodeValue().trim();
// skip over whitespace-only text
if (text != null && text.isEmpty() == false) {
System.out.println(text);
}
}