xPath解析XML文件

一种:不带名称空间的XML,可以直接用xapth表达式解析

1     Document document = DocumentHelper.parseText(resultXML);
2     Element ele = (Element) document.selectSingleNode("/CUSTINFORESPONSE/MSGBODY");

二种:带名称空间的xml

<?xml version="1.0" encoding="utf-8"?>
<BFSREQUEST xmlns="http://impl.webservice.ocs.sunrise.com">
  <MSGHEADER>
    <MSGTYPE>31</MSGTYPE>
    <RECORDTYPE>956</RECORDTYPE>
    <VERSION>01</VERSION>
  </MSGHEADER>
  <MSGBODY>
  </MSGBODY>
</BFSREQUEST>

比如这种,这种带名称空间的,可以将xml读成字符串后,将xmlns="http://impl.webservice.ocs.sunrise.com"部分,用空格替换掉,就可以用xpath正常解析。

三种:带名称空间的

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

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <ns0:qryUserActivityResponse xmlns:ns0="http://qryactionservice2.service.protocol.cxf.linkage.com/">
      <qryUserActivityRSP>

如果是这种带名称空间的,用第二种方法就不好搞了,我反正是没试出来。这样的麻烦些。

     Document document = DocumentHelper.parseText(result);
        Map<String, String> spaceMap = new HashMap<>();
        spaceMap.put("soap", "http://schemas.xmlsoap.org/soap/envelope/");
        spaceMap.put("ns0", "http://qryactionservice2.service.protocol.cxf.linkage.com/");
        XPath codeXpath = document.createXPath("soap:Envelope//RSP_CODE");
        codeXpath.setNamespaceURIs(spaceMap);
        Node resultCode = codeXpath.selectSingleNode(document);

这种要创建利用名称空间创建xpath对象,但是要注意的是,在些xpath表达式时,要带上名称空间的别名。例如

"soap:Envelope//RSP_CODE"

具体原理没研究,就是记录过程。

posted on 2019-01-26 19:16  ajax取个名字真难  阅读(255)  评论(0编辑  收藏  举报

导航