使用 java 解析 XHTML

Parsing XHTML with java

提问人:Robert 提问时间:6/6/2018 最后编辑:Robert 更新时间:6/7/2018 访问量:1443

问:

我需要一些关于在 java 中读取 URL XHTML 页面的指导:

这是我打印特定字符串的最佳尝试:

    try {       
    URL item = new URL("url");
                URLConnection connect = item.openConnection();
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc= dBuilder.parse(connect.getInputStream());
                doc.getDocumentElement().normalize();
                NodeList nList = doc.getElementsByTagName("tag");
                for(int temp = 0; temp<nList.getLength(); temp++) {
                    Node nNode = nList.item(temp);
                    if(nNode.getNodeType() == Node.ELEMENT_NODE) {
                        Element el = (Element) nNode;
        System.out.println((el.getElementsByTagName("wantedElement").item(0).getTextContent()));
                    }}
}catch(IOException | ParserConfigurationException | SAXException e) {
            e.printStackTrace();
            }

来自 Eclipse 的响应:

 [Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.

我正在尝试解析的XHTML示例(来自TD Ameritrade API):

<CandleList>
<candles>
<candles>
<open>45.97</open>
<high>46.26</high>
<low>45.8</low>
<close>46.0</close>
<volume>7176781</volume>
<datetime>1496293200000</datetime>
</candles>
<candles>
<open>46.22</open>
<high>46.86</high>
<low>45.9</low>
<close>46.8</close>
<volume>9523927</volume>
<datetime>1496379600000</datetime>
</candles>

我感谢任何帮助!

Java XML 解析 DOM XHTML

评论

1赞 Scary Wombat 6/6/2018
发布您尝试解析的文本怎么样
0赞 Jan B. 6/6/2018
如果你的XML的缩进和你的代码片段一样混乱,我有一个线索,是什么导致了错误的:)
0赞 jingx 6/6/2018
我不会尝试使用 DOM API 解析从某个网站中提取的 XHTML。请改用 jsoup。它更宽容。
1赞 Erwin Bolwidt 6/6/2018
你要解析的不是 XHTML,而是 XML。你需要发布整个响应,包括前几个字符,因为这就是问题所在(你还需要发布结尾,因为你发布的 xml 是无效的,因为它没有关闭所有标签)
1赞 Scary Wombat 6/6/2018
如果尝试使用 xmlvalidation.com 验证此 xml,它也会失败

答:

0赞 gagan singh 6/7/2018 #1

虽然该问题包含注释中提到的所有问题,但第 1 行第 1 列的错误与流开头的 BOM 有关。

某些服务,尤其是 .Net 服务,会在流的开头发送 BOM 来标记编码,例如 UTF-8、UTF-16LE 等。

字节顺序标记搞砸了 Java 中的文件读取