为了账号安全,请及时绑定邮箱和手机立即绑定

解析Java中的XML字符串

解析Java中的XML字符串

喵喔喔 2021-04-28 18:39:46
我正在尝试解析以下字符串以获得“ 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 回答

?
九州编程

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>节点。


查看完整回答
反对 回复 2021-05-19
  • 3 回答
  • 0 关注
  • 301 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信