我正在尝试解析以下字符串以获得“ orderNo”String requestBody="<?xml version="1.0" encoding="UTF-8" standalone="yes"?><ShipmentList><Shipment ActualShipmentDate="2018-06-26T11:25:00+05:30" DocumentType="0005" TotalWeight="55.5" TotalWeightUOM="LB" TrackingNo="9461236897846412938163"><ShipmentLines><ShipmentLine OrderNo="1529904772887" PrimeLineNo="1" Quantity="3" SubLineNo="1"/><ShipmentLine OrderNo="1529904772887" PrimeLineNo="2" Quantity="3" SubLineNo="1"/><ShipmentLine OrderNo="1529904772887" PrimeLineNo="3" Quantity="3" SubLineNo="1"/><ShipmentLine OrderNo="1529904772887" PrimeLineNo="4" Quantity="3" SubLineNo="1"/><ShipmentLine OrderNo="1529904772887" PrimeLineNo="5" Quantity="3" SubLineNo="1"/></ShipmentLines><Extn ExtnPackageASN="55538770655551006451" ExtnPackageID="6247442951596360944" ExtnPackLength="25.0" ExtnLengthUOM="IN" ExtnPackWidth="20.0" ExtnWidthUOM="IN" ExtnPackHeight="16.0" ExtnHeightUOM="IN" ExtnCarrierMethodId="83"/></Shipment></ShipmentList>";NodeList nl = null; try { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(requestBody); XPathFactory xPathfactory = XPathFactory.newInstance(); XPath xpath = xPathfactory.newXPath(); XPathExpression expr = xpath.compile("//ShipmentList/Shipment/ShipmentLines/ShipmentLine[@OrderNo]"); nl = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); } catch (XPathExpressionException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (ParserConfigurationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (SAXException e1) {我已经尝试使用上面的代码片段,但是有人可以让我知道这是什么错误,这并没有帮助
3 回答
![?](http://img1.sycdn.imooc.com/54584c910001b8d902200220-100-100.jpg)
九州编程
TA贡献1785条经验 获得超4个赞
首先:"
必须像\"
Java String中那样转义字符。requestBody字符串必须看起来像: String requestBody="<?xml version=\"1.0\" encoding=\"UTF-8\" ...
,依此类推。
然后是主要错误:
Document doc = builder.parse(requestBody);
builder解析的不是String而是该String表示的URL。因此,请改用以下InputStream
示例:
Document doc = builder.parse(new ByteArrayInputStream(requestBody.getBytes()));
然后您将获得五个<ShipmentLine>
节点。
添加回答
举报
0/150
提交
取消