Java将DOM对象转换为段落
java中是否有类似于python函数Java将DOM对象转换为段落,java,xml,dom,sax,Java,Xml,Dom,Sax,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> 这是一个文本! 列表1列表2 我想要的输出是:
lmxl.sax.saxify
[1]的函数,用于从DOM生成sax事件并针对sax ContentHandler激发它们。
主要目的是将DOM对象转换为段落列表。
给定这个html片段
<p> Here is a text!
<ul><li>list1</li><li>list2</li></ul>
</p>
这是一个文本!
- 列表1
- 列表2
我想要的输出是:
- 第一段:这里有一段文字李>
- 第2段:清单1
- 第3段:清单2
[1] 是的,您可以使用DOMSource和SAXSult运行转换,请参阅:
但是为什么不从DOM本身提取所需的信息呢?如果要从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);
}
}
Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(“/path/example.html”);
XPath=XPathFactory.newInstance().newXPath();
字符串模式=“//*/text()”;//检索文档中的所有文本节点
NodeList nl=(NodeList)xPath.compile(模式)
.evaluate(doc,XPathConstants.NODESET);
对于(int i=0;i
那么您想从DOM文档中检索所有文本节点?这是怎么回事?我是DOM parsingAlso的新手,我想解析的文件是html而不是xml。谢谢你的回复。我尝试了你的代码,但是我遇到了这个错误。dtd:31:3:实体“HTML.Version”的声明必须以“>”结尾。你知道这是因为我解析的是HTML而不是xml吗?快速谷歌搜索表明SGML dtd确实是这样。这里有一条线索,提出了克服这一问题的方法
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);
}
}