首页 > 其他分享 >从WebService的SOAP返回数据中获取子级的XML内容

从WebService的SOAP返回数据中获取子级的XML内容

时间:2022-10-12 09:56:52浏览次数:79  
标签:XML xml WebService jdom org Element 子级 返回值 import

在webservice调用的返回值中,为了传输方便,一般只有一个返回值.这返回值往往是xml或者json格式. 如果用java httpclient方式调用的话, 返回值将是完整的SOAP XML数据返回.如果想获取其中包含的真正的返回值,还需要解析这个xml, 然鹅....在用java自有的xml解析功能时, 在获取body节点(Element/Node)之后, 再获取body的内容时, 只能获取Text内容,并不包含子xml的标签.为解决这个问题我们需要使用到jdom这个jar包.下面举例说明获取xml内容的方式.

下载jdom(JDOM) 或者直接构建maven项目:

<!-- https://mvnrepository.com/artifact/jdom/jdom -->
<dependency>
    <groupId>jdom</groupId>
    <artifactId>jdom</artifactId>
    <version>1.0</version>
</dependency>

 

假如SOAP 返回值:

<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
   <soapenv:Body>
      <root>
         <code>0</code>
         <message></message>
         <students>
            <student>
               <name>李二狗</name>
               <classroom>三班</classroom>
               <age>198</age>
               <sex>男</sex>
            </student>
            <student>
               <name>王丫蛋</name>
               <classroom>四(3)班</classroom>
               <age>19</age>
               <sex>女</sex>
            </student>
         </students>
      </root>
   </soapenv:Body>
</soapenv:Envelope>

 

我们的目的是读取<ns:Body>内的root节点的所有xml内容如下:

解析的代码:

import java.io.ByteArrayOutputStream;
import java.io.StringReader;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.junit.jupiter.api.Test;

class PenguinTest {

    @Test
    void test() {
        String soapresp = "";
        soapresp = "<soapenv:Envelope xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\">\r\n"
                + "   <soapenv:Body>\r\n" + "      <root>\r\n" + "         <code>0</code>\r\n"
                + "         <message></message>\r\n" + "         <students>\r\n" + "            <student>\r\n"
                + "               <name>李二狗</name>\r\n" + "               <classroom>三班</classroom>\r\n"
                + "               <age>198</age>\r\n" + "               <sex>男</sex>\r\n" + "            </student>\r\n"
                + "            <student>\r\n" + "               <name>王丫蛋</name>\r\n"
                + "               <classroom>四(3)班</classroom>\r\n" + "               <age>19</age>\r\n"
                + "               <sex>女</sex>\r\n" + "            </student>\r\n" + "         </students>\r\n"
                + "      </root>\r\n" + "   </soapenv:Body>\r\n" + "</soapenv:Envelope>";
        SAXBuilder saxBuilder = new SAXBuilder();
        StringReader reader = new StringReader(soapresp);
        Document build = null;
        try {
            build = saxBuilder.build(reader);
            // 读取root节点
            Element body = (Element) build.getRootElement().getChildren().get(0); // ns:Body            
            Element root = (Element) body.getChildren().get(0);
            

            // Element 转 XML  String
            XMLOutputter xmlout = new XMLOutputter();
            ByteArrayOutputStream bo = new ByteArrayOutputStream();
            xmlout.output(root, bo); // 把Element 写入 ByteArrayOutputStream 中
            String rootXml = bo.toString();
            bo.close();
            System.out.println(rootXml);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

得到的结果如下:

<root>
         <code>0</code>
         <message />
         <students>
            <student>
               <name>李二狗</name>
               <classroom>三班</classroom>
               <age>198</age>
               <sex>男</sex>
            </student>
            <student>
               <name>王丫蛋</name>
               <classroom>四(3)班</classroom>
               <age>19</age>
               <sex>女</sex>
            </student>
         </students>
      </root>

 

标签:XML,xml,WebService,jdom,org,Element,子级,返回值,import
From: https://www.cnblogs.com/equation/p/16783472.html

相关文章

  • Cause: org.apache.ibatis.builder.BuilderException: Error creating document insta
    问题现象:Cause:org.apache.ibatis.builder.BuilderException:Errorcreatingdocumentinstance. Cause:org.xml.sax.SAXParseException;lineNumber:49;columnNum......
  • JS 调用 FetchXML
    varcurUserid=Xrm.Utility.getGlobalContext().userSettings.userId;varfetchXml="<fetchversion='1.0'output-format='xml-platform'mapping='logical'dis......
  • javabean、xml、json、map之间的相互转换
    javabean转map利用cglib的BeanMap类实现转换importorg.springframework.cglib.beans.BeanMap;/****@Title:beanToMap*@Description:javabean转map*@parambean*......
  • maven 项目 maven setting.xml 配置 maven 项目 初始 办的一些事,以及一些采坑记录
    目录​​1.介绍​​​​2.下载地址​​​​2.1放到本地一个位置,解压​​​​2.2配置eclipse配置 ​​​​3.setting.xml配置​​​​3.1本地lib包等jar放到哪里​​​​......
  • Idea-->Maven-->Mybatis-->pom.xml配置
    <!--依赖列表--><dependencies><!--MyBatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</......
  • java无法加载maper.xml问题
    项目依赖其他模块,模块中有mapper,本项目也有mapper,导致项目无法正常运行。解决办法:1、配置mybatis:#搜索指定包别名typeAliasesPackage:com.XXX.XXX,com.YYY.......
  • logback-spring.xml实战配置
    示例如下:<?xmlversion="1.0"encoding="UTF-8"?><configurationscan="true"scanPeriod="10seconds"debug="true"><!--日志文件存储路径--><propertyna......
  • logback.xml和logback-spring.xml的区别
    logback和logback-spring.xml都可以用来配置logback,但是2者的加载顺序是不一样的。logback.xml—>application.properties—>logback-spring.xml. logback.xml加载早于......
  • logback简介及logback.xml配置详解
    一、logback的介绍Logback是由log4j创始人设计的另一个开源日志组件,官方网站:http://logback.qos.ch。它当前分为下面下个模块:logback-core:其它两个模块的基础模块log......
  • XML和JSON数据格式
    目录​​XML​​​​DTD(文档类型定义)​​​​DTD实体​​​​JSON​​​​使用python解析JSON数据​​​​XML和JSON的区别 ​​​​XML的优缺点​​​​JSON的优缺点​......