zoukankan      html  css  js  c++  java
  • 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"

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

  • 相关阅读:
    JS 子窗口向父窗口传值
    CSS垂直居中盘点
    Javascript关于BOM与DOM详解
    css inline元素与inline-block,block元素
    CSS定位
    mysql 8+ 忘记root密码 解决方案
    php 引入其他文件中的变量
    h5 input无法输入问题 屏蔽长按事件
    关于ajax请求status 200 却进入error 回调函数或显示跨域问题的解决方案及原因
    vue 中使用 lazyload 插件 数据更图片不更新 的原因 及解决方案
  • 原文地址:https://www.cnblogs.com/step-and-step/p/10324665.html
Copyright © 2011-2022 走看看