如何仅从SOAP响应中获取XML内容

时间:2017-10-29 15:13:28

标签: java xml soap jdom

我有一个示例回复:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ASCIIEncoding encoding = new ASCIIEncoding();
            string postData = "apiID=2794187564564";

            // Prepare web request...
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(
                "http://fms.psrpc.co.uk/apistate2.php?" + postData);

            // Send the data.
            myRequest.GetResponse();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.TopMost = true;
            this.FormBorderStyle = FormBorderStyle.None;
            this.WindowState = FormWindowState.Maximized;
        }
    }
}

我想删除<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <trk:TrackResponse xmlns:trk="somens1"> <common:Response xmlns:common="somens2"> <common:ResponseStatus> <common:Code>1</common:Code> <common:Description>Success</common:Description> </common:ResponseStatus> <common:TransactionReference> <common:CustomerContext>Sample Response</common:CustomerContext> </common:TransactionReference> </common:Response> </trk:TrackResponse> </soapenv:Body> </soapenv:Envelope> EnvelopeHeader标记,并仅使用从Body开始的xml。

我正在尝试使用TrackResponse遍历响应。

jdom

我实际上需要从 Element body = jdom.getRootElement().getChild("Body", Namespace.getNamespace("http://schemas.xmlsoap.org/soap/envelope/")); 开始从jdom Document检索的jdom Element对象。

解决方案或更好的替代方案?

1 个答案:

答案 0 :(得分:1)

使用以下内容检索您的body内容:

Element body = jdom.getRootElement().getChild("Body", Namespace.getNamespace("http://schemas.xmlsoap.org/soap/envelope/"));

执行:

Namespace trk = Namespace.getNamespace("somens1");
Element response = body.getChild("TrackResponse", trk);
response.detach();
Document doc = new Document(response);

这将创建一个新文档,其中trk带前缀的命名空间和TrackResponse位于根目录。将元素从一个位置(父级)移动到另一个位置时需要detach()