无法处理 XML。不允许获取与"[xX][mM][lL]"匹配的处理指令目标。org.xml.sax.SAXParseException error



你能检查一下这个XML有什么问题吗?客户端正在发送此 XML 请求来处理我的应用程序。

<soapenv:Envelope
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:eze="http://ezeepay_test">
<soapenv:Header/>
<soapenv:Body>
<eze:RequestService
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<InputXml xsi:type="xsd:string">
<?xml version="1.0"
encoding="UTF-8"?>
<Request>
<BankID>05</BankID>
<TransactionID>1004114741235</TransactionID>
<TransactionType>Payment</TransactionType>
<ServiceType>Bill</ServiceType>
<TransactionDateStamp>04-04-2019 11:43:13</TransactionDateStamp>
<Amount>500</Amount>
<PaymentType>Cash</PaymentType>
</Request>
</InputXml>
</eze:RequestService>
</soapenv:Body>
</soapenv:Envelope>

我需要使用 xPath 遍历节点以读取元素。但是当我解析此XML时,出现以下错误。

我正在使用DocumentBuilderFactory进行宣传。

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
//This is where I am getting Error.
Document doc = db.parse(new InputSource(new StringReader(XMLRequestString)));

请让我知道我可以在我的代码级别进行哪些操作。

问题的答案是,发送的数据不符合 SOAP 和 XML 标准,您的服务器拒绝它是完全正确的。它所打破的具体规则是构造<?xml....?>只能出现在文档的开头(如果它出现在开头,它将是一个XML声明;如果它没有被命名为"xml",它将是一个处理指令;事实上,它两者都不是)。

不要试图更改您的服务器代码以接受客户端发送给您的任何垃圾:这是毁灭之路。

最新更新