SimpleXML SOAP 响应命名空间问题

2023-12-29

在为此花费了几个沮丧的时间后,我请求您的帮助。

我正在尝试从 SOAP 响应中获取特定节点的内容。

响应是

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="<a href="http://www.w3.org/2003/05/soap-envelope">http://www.w3.org/2003/05/soap-envelope</a>"<xmlns:ns1="<a href="http://soap.xxxxxx.co.uk/">http://soap.xxxxxx.co.uk/</a>">
    <env:Body>
        <ns1:PlaceOrderResponse>
            <xxxxxOrderNumber></xxxxxOrderNumber>
            <ErrorArray>
                <Error>
                    <ErrorCode>24</ErrorCode>
                    <ErrorText>The+client+order+number+3002254+is+already+in+use</ErrorText>
                </Error>
                <Error>
                    <ErrorCode>1</ErrorCode>
                    <ErrorText>Aborting</ErrorText>
                </Error>
            </ErrorArray>
        </ns1:PlaceOrderResponse>
    </env:Body>
</env:Envelope>

我正在尝试获取 的节点和子节点。 由于 XML 包含命名空间

$XmlArray   = new SimpleXMLElement($XmlStr);

foreach ($XmlArray->env:Envelope->env:Body->ns1:PlaceOrderResponse->ErrorArray->Error as $Error)
{
    echo $Error->ErrorCode."<br />";
}

不起作用。 我读过很多文章,例如

  • http://www.sitepoint.com/blogs/2005/10/20/simplexml-and-namespaces/ http://www.sitepoint.com/blogs/2005/10/20/simplexml-and-namespaces/
  • http://blog.stuartherbert.com/php/2007/01/07/using-simplexml-to-parse-rss-feeds/ http://blog.stuartherbert.com/php/2007/01/07/using-simplexml-to-parse-rss-feeds/

该网站上有大约 20 个问题,但遗憾的是没有帮助。

就连写作,

$XmlArray   = new SimpleXMLElement($XmlStr);

echo "<br /><br /><pre>\n";
print_r($XmlArray);
echo "<pre><br /><br />\n";

gives

SimpleXMLElement Object
(
)

这让我想知道肥皂响应 ($XmlStr) 是否实际上是 SimpleXMLElement 的有效输入。

看来这条线

$XmlArray   = new SimpleXMLElement($XmlStr);

没有按照我的预期去做。

任何关于如何从上面的 XML 获取节点的帮助都将非常受欢迎。

显然,让它工作(有一个工作示例)是我在短期内需要的,但如果有人可以帮助我理解我做错了什么,从长远来看会更好。

干杯。 斯图


你必须使用SimpleXMLElement::children() http://php.net/SimpleXMLElement.children,尽管此时使用 XPath 可能会更容易。

<?php
    $XmlStr = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"  xmlns:ns1="http://soap.xxxxxx.co.uk/" >
    <env:Body>
        <ns1:PlaceOrderResponse>
            <xxxxxOrderNumber></xxxxxOrderNumber>
            <ErrorArray>
                <Error>
                    <ErrorCode>24</ErrorCode>
                    <ErrorText>The+client+order+number+3002254+is+already+in+use</ErrorText>
                </Error>
                <Error>
                    <ErrorCode>1</ErrorCode>
                    <ErrorText>Aborting</ErrorText>
                </Error>
            </ErrorArray>
        </ns1:PlaceOrderResponse>
    </env:Body>
</env:Envelope>
XML;

    $XmlArray   = new SimpleXMLElement($XmlStr);

    $t = $XmlArray->children("env", true)->Body->
        children("ns1", true)->PlaceOrderResponse->
        children()->ErrorArray->Error;
    foreach ($t as $error) {
        echo $error->ErrorCode, " " , $error->ErrorText, "<br />";
    } 

gives:



24 The+client+order+number+3002254+is+already+in+use
1 Aborting
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SimpleXML SOAP 响应命名空间问题 的相关文章

随机推荐

  • Django 结账无法访问:找不到页面(404)

    我正在尝试使用 Django 开发一个电子商务网站 所以我现在 用户可以将商品添加到购物车 但是当我尝试继续结帐时 由于某种原因 我的结帐表单没有显示 而是显示 找不到页面 404 我确保我已经注册了我的模型并运行了迁移 问题是什么 我的观
  • django 1.10 媒体图像不显示

    我通过将以下内容添加到站点 urls py 让 django 媒体图像在现有的 django 1 7 项目中工作 urlpatterns patters url r media P
  • 适用于 VS11 开发者预览版的 MySQL 提供程序

    是否有与 Visual Studio 11 开发人员预览版集成的 MySQL 连接提供程序 我已经尝试过 MySQL 连接器 v6 4 4 但我没有看到从新连接对话框连接到 MySQL 数据库的选项 我调整了 Net Connector 版
  • 如何执行存储在 MySQL 表列中的查询?

    mysql gt select from CT CID MID REPORT QUERY 1 1 select from emp 2 2 select from student 2 rows in set 0 00 sec 我想执行查询RE
  • 在 rgl 中填充轮廓

    以下代码绘制一些点并用线连接它们 我要填写 由选择颜色和 Alpha 的线条包围的区域 我似乎不知道如何使用 rgl 做到这一点 Open plot and add axes open3d decorate3d xlim c 0 4 yli
  • 如何使用 Qt 4 创建 OpenGL 3 上下文?

    我想学习使用 OpenGL 进行图形编程 因为我刚刚开始学习它 所以我决定学习新的 OpenGL3 的做事方式 据我所知 必须为此创建一个 OpenGL 3 上下文 如果我理解正确的话 新的 OpenGL 3 2 中的核心配置文件 嗯 我考
  • 我几乎每次都将 Stateless Widget 与 BLoC 一起使用。我错了吗?

    我很难理解如何使用 Flutter 处理某些特定情况下的状态 例如 假设我需要一个页面 单击按钮即可从 API 获取数据 这样的请求可能需要时间或者可能发生任何类型的问题 因此 我可能会使用 BLoC 模式在请求经历各种 状态 时正确通知用
  • JQuery 表排序器问题

    我在使用 JQuery 时遇到了一些问题表格排序器 http tablesorter com docs 插入 如果单击列标题 它应该按此列对数据进行排序 但存在一些问题 行未正确排序 1 1 2183 236 总行数包含在排序中 关于 2
  • 将简单查询转换为蛋糕查询?

    实际上我有 1 个查询 但我无法将其转换为 CakePHP 查询格式 result select from esl userresults where esl userresults esl songID esl lyrics id and
  • 多线程可以在单处理器系统上实现吗?

    我一直遵循这样的概念 多线程只能在多处理器系统上实现 其中有多个处理器分配给每个线程 并且每个线程可以同时执行 在这种情况下没有调度 因为每个线程都有单独的资源专用于它 但我最近在某处读到我也可以在单处理器系统上执行多线程 这是对的吗 如果
  • 是否可以使固定位置的 div 响应式?

    我一直在尝试使一些 SVG 数据图表具有响应性 但似乎无法通过应用于元素的当前 CSS position fixed 来做到这一点 如果可能的话 我正在寻找一种不依赖于媒体查询的解决方案 因为我有多个元素需要应用它 如果这是不可能的 那么在
  • 使用PostgreSQL plpython3u函数返回一个表

    我想退回桌子 该函数获取一个数组 查询为 select function name array agg column name from table name 我编码如下 create type pddesctype as count fl
  • C# 无法加载文件或程序集“Microsoft.SharePoint.Library”

    我正在 64 位版本的 Windows 7 上进行开发 运行 MOSS SharePoint 这是我的开发机器 现在 当我将 Web 服务应用程序部署到测试服务器 Windows 2003 32 位 未安装 Sharepoint 时 我收到
  • iOS 中的上滑菜单

    如何创建一个像相机胶卷中那样的 向上滑动 菜单 您可以在其中选择是否要将图像作为电子邮件 彩信等发送 An UI操作表 http developer apple com library ios documentation uikit ref
  • 带有动态 SQL 语句的游标 For 循环

    有没有办法用动态 SQL 语句执行 Cursor For 循环 如果我不想声明记录 我可以这样做 仅当我声明游标时 For I in cuSelect Loop dbms output put line I NAME End Loop 我可
  • 在三个js中前后移动相机

    如何沿着相机所面对的轨迹从固定点前后移动相机 我知道有几个控制脚本可以执行此操作 但我需要执行一些自定义操作 并且我无法分解它们的代码来找出如何隔离上述行为 我见过这个答案 https stackoverflow com questions
  • Pusher 客户端 /pusher/auth 返回错误 500(内部服务器错误)

    我正在开发一个快速聊天应用程序 以提高我的推送技能 并决定开始进入私人频道 我在相同的客户端代码上使用的公共频道应用程序并稍微调整了 App Events chatmessagesent 事件 更改了 return new Channel
  • 无法将类中的 PDO 对象初始化为属性[重复]

    这个问题在这里已经有答案了 可能的重复 将属性声明为对象 https stackoverflow com questions 2202995 declare property as object class core public dbh
  • 如何在不使用 UINavigationController 的情况下在新的非模型视图控制器中进行转换?

    以下似乎是一个典型的用例 您使用显示登录屏幕的 LoginViewController 启动应用程序 用户成功登录后 您希望显示应用程序的主视图 我们将其称为 MainViewController 您不想将 LoginViewControl
  • SimpleXML SOAP 响应命名空间问题

    在为此花费了几个沮丧的时间后 我请求您的帮助 我正在尝试从 SOAP 响应中获取特定节点的内容 响应是