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"

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

  • 相关阅读:
    sqlalchemy
    tornado-模板继承extend,函数和类的导入
    vi规范
    Spark 分布式SQL引擎
    Spark SQL 编程
    Spark SQL 基本原理
    spark SQL概述
    spark 多语言编程
    hadoop YARN
    spark 存储管理机制
  • 原文地址:https://www.cnblogs.com/step-and-step/p/10324665.html
Copyright © 2011-2022 走看看