当前位置: 首页 > 知识库问答 >
问题:

如何解析SOAP以列出所有请求和对象名称

麹权
2023-03-14

当我知道命名空间和请求名称时,我能够解析XML SOAP。

因为我有不同种类的SOAP请求,所以我想在SOAP文件中获得请求名。我肥皂的一部分的摘录:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope 
   xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:ns1="http://schema.example.com" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
   SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
<SOAP-ENV:Body>
 **<ns1:SendMailling>**
 <campagne xsi:type="ns1:Campaign"><ActivateDedup xsi:nil="true"/><BillingCode     xsi:nil="true"/><DeliveryFax xsi:type="ns1:DeliveryFax"/>
 <DeliveryMail xsi:type="ns1:DeliveryMail">
 ...

PHP代码:

if(is_file($file))
    {
        $content=file_get_contents($file);


        $xml = simplexml_load_string($content);
        $xml->registerXPathNamespace('ns1', 'http://schema.example.com');



        foreach ($xml->xpath('\\SOAP-ENV:') as $item)
        {
            //certainly the bad way?
            echo "<pre>";
                print_r($item);
            echo "</pre>";

        }

        echo "<pre>";
            print_r($xml);
        echo "</pre>";


    }

我没有得到任何结果…我想让它出现:“SendMailling”(识别请求名称)

当我特别指明

//foreach($xml->xpath('//ns1:SendMailling') as $item)

没有问题。

我尝试了< code > foreach($XML-

共有1个答案

公英哲
2023-03-14

我很难理解你的问题,所以这可能不是答案。

如果我理解的没错,您希望选择所有元素节点,这些节点是<code>的直接子元素

您已经注册了要与 SimpleXMLElement::xpath 一起使用的命名空间前缀:

$xml->registerXPathNamespace('ns1', 'http://schema.example.com');

据我所知,您尚未注册 SOAP-ENV / http://schemas.xmlsoap.org/soap/envelope/ 命名空间。

在XPath中,要匹配一个元素,可以指定它的名称空间。有多种方法可以做到这一点:

*               All elements in any namespace.
prefix:*        All elements in namespace "prefix" (registered prefix)
prefix:local    Only "local" elements in namespace "prefix"

例如,要选择带有< code>ns1前缀的所有元素:

//ns1:*

您可能希望限制这一点,因为您只想要直接的孩子

/SOAP-ENV:Body/ns1:*

这应该包含您正在寻找的所有元素。

(OP:)再次感谢,当我做a

foreach ($xml->xpath('//SOAP-ENV:Body/ns1:*') as $item) {
    echo $item->getName() . "<br>";
}

一切正常,我得到了请求名< code >“SendMailling”

 类似资料:
  • 问题内容: 我需要所有已登录的SOAP请求,以及持续时间(处理请求所花费的时间)。 最好的方法是什么?看起来可以为Spring WebServices配置log4j,但是它将记录所有值吗? 将以下行添加到log4j.xml 编辑:我们实际上是在使用,而不是。另外,看起来可以通过配置PayloadLoggingInterceptor来做到这一点 但是我不确定日志消息会去哪里。我将该拦截器添加到了我们

  • 我试图向服务器发出POST请求,但我遇到了一个问题。服务器似乎收到了请求,但我仍然在控制台中看到一个错误,建议将主体从Object更改为JSON 错误:SyntaxError:JSON中位于JSON位置0处的意外标记A。在XMLHttpRequest处解析()。装载(http://localhost:4200/vendor.js:69142:51)text:“它是用id=:23保存的新用户”pro

  • 我有一个4个测试套件的soap项目,每个测试套件都有一些测试用例,每个测试用例都有一些测试步骤[Soap请求,Groovy脚本]我能够使用下面提到的代码访问所有属性,但是,代码在本地系统中写入空白请求/响应文件** **请帮助解决这个问题,**

  • 从这里的代码,我只想获得: 我尝试过使用JDT解析我代码,所以我的代码如下所示: 但不管用

  • 我发送一个POST请求,从一家运输公司生成AWB。为了做到这一点,我必须通过SOAP API POST请求发布多个数据条目。下面的XML是类似的,这是必需的(我已经简化了,否则它要求超过30个参数) 我是SOAP新手,请帮助我朝着正确的方向前进,我甚至非常感谢上面的XML代码,因为它有助于更好地理解。

  • 我正在使用API,我是PHP SOAP的新手。我正在尝试创建一个请求来获取车辆值,并希望获得响应值。 以下是示例SOAP 1.1请求。显示的占位符需要替换为实际值。 这是SOAP客户端URL调用- 这是我尝试过的,但没有结果- 我尝试了另一种方法,但在解析WSDL时出错 这是我得到的错误- SOAP-ERROR:解析WSDL:无法从'POST /vehicles/vehicle.asmxHTTP/