gpt4 book ai didi

java - 为什么 org.w3c.dom 解析我的 xml 是错误的?

转载 作者:行者123 更新时间:2023-12-02 04:28:58 24 4
gpt4 key购买 nike

解析以下xml后,

<html>
<body>
<a>
<div>
<span>foo</span>
</div>
</a>
</body>
</html>

使用 javax.xml.xpath 解析的 org.w3c.dom 文档指示以下内容:

  • diva的父节点
  • aspan 的父节点

这是为什么,我该如何正确解析这个 xml?

这是我正在使用的代码,后面是用于创建 Document 对象的方法,最后是代码的输出。

String myxml = ""
+ "<html>"
+ "<body>"
+ "<a>"
+ "<div>"
+ "<span>foo</span>"
+ "</div>"
+ "</a>"
+ "</body>"
+ "</html>";

Document doc = HttpDownloadUtilities.getWebpageDocument_fromSource(myxml);

XPath xPath = XPathFactory.newInstance().newXPath();

Node node = ((Node)xPath.compile("//*[text() = 'foo']").evaluate(doc, XPathConstants.NODE));

System.out.println(" node tag: " + node.getNodeName());
System.out.println(" parent tag: " + node.getParentNode().getNodeName());
System.out.println("grandparent tag: " + node.getParentNode().getParentNode().getNodeName());

Set<Node> nodes = H.getSet((NodeList)xPath.compile("//*").evaluate(doc, XPathConstants.NODESET));

for (Node n : nodes) {
System.out.println();
try {
System.out.println("node: " + n.getNodeName());
} catch (Exception e) {
}
try {
System.out.println("child: " + n.getChildNodes().item(0).getNodeName());
} catch (Exception e) {
}
}

这是用于创建 Document 对象的方法:

public static Document getWebpageDocument_fromSource(String source) throws InterruptedException, IOException {
try {
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
props.setAllowHtmlInsideAttributes(true);
props.setAllowMultiWordAttributes(true);
props.setRecognizeUnicodeChars(true);
props.setOmitComments(true);

DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = null;
try {
builder = builderFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}

TagNode tagNode = new HtmlCleaner().clean(source);

Document doc = new DomSerializer(new CleanerProperties()).createDOM(tagNode);

return doc;
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
return null;
}
}

输出:

       node tag: span
parent tag: a
grandparent tag: div

node: html
child: head

node: head

node: body
child: html

node: html
child: body

node: body
child: a

node: a

node: div
child: a

node: a
child: span

node: span
child: #text

最佳答案

很可能 html 解析器修复了无效的 html。 a 标签内不允许使用 div 标签。一旦你有了 Document 对象,html 就已经被解析并修复了。

关于java - 为什么 org.w3c.dom 解析我的 xml 是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31755327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com