在Java中读取XML API响应

在Java中读取XML API响应,java,xml,xml-parsing,Java,Xml,Xml Parsing,我想阅读下面的XML响应,但它给出了一个错误 <html> <head> <title>OK</title> </head> <body> <h1>OK</h1> <table> <tbody> <tr> <td>Status</td>

我想阅读下面的XML响应,但它给出了一个错误

<html>
<head>
    <title>OK</title>
</head>
    <body>
    <h1>OK</h1>
    <table>
        <tbody>
            <tr>
                <td>Status</td>
                <td><div id="Status">200</div></td>
            </tr>
            <tr>
                <td>Message</td>
                <td><div id="Message">Page created</div></td>
            </tr>
            <tr>
                <td>Location</td>
                <td><a href="/content/parentnode/demopage" id="Location">/content/parentnode/demopage</a></td>
            </tr>
            <tr>
                <td>Parent Location</td>
                <td><a href="/content/parentnode" id="ParentLocation">/content/parentnode</a></td>
            </tr>
            <tr>
                <td>Path</td>
                <td><div id="Path">/content/parentnode/demopage</div></td>
            </tr>
            <tr>
                <td>Referer</td>
                <td><a href="" id="Referer"></a></td>
            </tr>
            <tr>
                <td>ChangeLog</td>
                <td><div id="ChangeLog">&lt;pre&gt;&lt;/pre&gt;</div></td>
            </tr>
        </tbody>
    </table>
    <p><a href="">Go Back</a></p>
    <p><a href="/content/parentnode/demopage">Modified Resource</a></p>
    <p><a href="/content/parentnode">Parent of Modified Resource</a></p>
    </body>
</html>
第40行是
.parse(新的InputSource(新的StringReader(response.toString()))


我做错了什么?

XML文档应该以

<?xml version="1.0" encoding="UTF-8"?>

</xml>

线程“main”org.xml.sax.saxpasseeption中的异常;行号:1;列数:1;prolog中不允许包含内容

此错误意味着以下几点:


  • 您的文档在的开头有空格,您正在解析的HTML代码可以由Java DOM解析器解析,但这可能是巧合:另一个HTML响应可能包含一些标记,从XML的角度来看,这是无效的。如果您100%确定,响应将以XML/XHTML格式出现,这不应该是问题所在,否则切换到JSoup解析器是有意义的,正如另一个答案中所建议的那样


    至于prolog中不允许的
    内容
    错误,它可能来自实际XML文档开头之前的空格或其他字符。您可以在解析字符串之前尝试修剪字符串,或者从第一个
    开始对其进行子串,这是否回答了您的问题?此外,有效的HTML并不意味着也有有效的XML。某些HTML标记没有相关的结束标记(例如:,
    等)。我的XML不是以
    开头,而是XML。那么,还有其他的阅读方法吗。为了删除空格,我使用了
    response.body().toString().trim()确保所有标记都有匹配的结束标记也将给出相同的错误。我正在使用
    .parse(新的InputSource(新的StringReader(response.toString()))您是否删除了响应<代码>字符串内容=response.toString().trim()?是的,我也试过了。它对你有用吗?当我将你的HTML从
    转换到
    时,它被成功解析了。我会在调试模式下检查响应的内容。它可以在开头包含一些其他字符,
    </xml>
    
    Document doc = DocumentBuilderFactory.newInstance()
                .newDocumentBuilder()
                .parse(new InputSource(new StringReader(xml)));
    
        NodeList nodes = doc.getElementsByTagName("div");
        if (nodes.getLength() > 0) {
            Element ele = (Element) nodes.item(0);
            System.out.println("Page created - "
                    + XPathFactory.newInstance().newXPath().evaluate("//div[contains(@id,'Message')]", ele));
        }