使用 PHP 解析带有命名空间的 SOAP XML 响应

2023-12-09

我有一个丑陋的 XML,上面有很多命名空间,当我尝试使用 simpleXML 加载它时,如果我指示第一个命名空间,我会得到一个 xml 对象,但后面带有其他命名空间的标签不会使其到达该对象。 这是 SOAP 响应

<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns8502="http://tempuri.org">
   <SOAP-ENV:Header>
     <Interface PartnerID="FastBooking" PartnerType="Test" Version="1.0.0" />
     <Credentials HotelID="AC00006" User="User" Password="123456" />
     <Client Ref ="123456789" TimeStamp="2012-12-14T12:24:25+0100"/>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
     <ServiceNameRQ xmlns="urn:wsTest">
         <GetRatesRS>
             <Rates>
                 <Rate RateID="12984" FromDate="2010-05-12" ToDate="2010-06-30" RateType="PUBLIC" RateCode="RAC" MinRate="100" MaxRate="1000" Currency="EUR" ReadOnly="No" FromRateID="11456">
                    <RateName>Rack Rate</RateName>
                 </Rate>
                 <Rate RateID="13219" FromDate="2010-07-12" ToDate="2010-12-31" RateType="PUBLIC" RateCode="NORMAL" MinRate="100" MaxRate="1000" Currency="EUR" ReadOnly="Yes">
                    <RateName>Normal Rate</RateName>
                     <R1 Name="Single Occupancy" MinRate="90.00" MaxRate="1500.00" />
                     <R2 Name="Double Occupancy" MinRate="120.00" MaxRate="2000.00" />
                     <R3 Name="2 Nights" MinRate="150.00" MaxRate="2000.00" />
                    </Rate>
                     </Rates>
            </GetRatesRS>
        </ServiceNameRQ>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

这是我正在使用的 PHP 代码:

$result = $xml_query;
$result = stripslashes($result);

 $result = simplexml_load_string($result);
$namespacesMeta = $result->getNamespaces(true);
$mediaXML = $result->children($namespacesMeta['SOAP-ENV:Header']);

$Interface = $mediaXML->xpath('//Interface');
$Credentials = $mediaXML->xpath('//Credentials');
$Client = $mediaXML->xpath('//Client');

$attributesInterface = $Interface[0]['@attributes'];
$PartnerID = $attributesInterface['PartnerID'];
$PartnerType = $attributesInterface['PartnerType'];
$Version = $attributesInterface['Version'];

$attributesCredentials = $Credentials[0]['@attributes'];
$HotelID = $attributesCredentials['HotelID'];
$User = $attributesCredentials['User'];
$Password = $attributesCredentials['Password'];


$HotelID = filter_var($HotelID, FILTER_SANITIZE_MAGIC_QUOTES);
$User = filter_var($User, FILTER_SANITIZE_MAGIC_QUOTES);
$Password = filter_var($Password, FILTER_SANITIZE_MAGIC_QUOTES);
$Password = tchag3iba($Password);

但我无法检索内容SOAP-ENV:Body (GetRatesRS -> Rates -> Rate)


费率数据可以这样访问:

Demo

$obj = simplexml_load_string($xml);

foreach($obj->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('urn:wsTest')->ServiceNameRQ->GetRatesRS->Rates->Rate as $rate)
{
    echo (string)$rate->RateName . "\n";
}

Outputs

机架率
正常费率

如果您想要 Rate 属性,您可以像这样获取它们(在循环内):

echo $rate->attributes()->RateID;

您可以阅读R1 and R2像这样的元素:

foreach($obj->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('urn:wsTest')->ServiceNameRQ->GetRatesRS->Rates->Rate as $rate)
{
    if(isset($rate->R1))
    {
       echo $rate->R1->attributes()->Name;
       echo $rate->R1->attributes()->MinRate;
    }
    if(isset($rate->R2))
    {
       echo $rate->R2->attributes()->Name;
       echo $rate->R2->attributes()->MinRate;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP 解析带有命名空间的 SOAP XML 响应 的相关文章

  • 如何设置 Apache FOP 中的默认语言

    我正在使用 Apache FOP 2 1 生成 PDF 文件 为此 我尝试将默认语言设置为英语 这应该在通过 Adob e Reader 的选项 文件 属性 高级 阅读选项 创建 PDF 后进行验证 该值当前为空 我尝试过设置xml lan
  • 如何将 Filesystem 类的 glob 方法与 StorageFacade 结合使用?

    这涉及到拉拉维尔 5 我可以看到Illuminate Filesystem Filesystem一个方法叫做glob pattern flags 0 不幸的是 这个方法并没有体现在默认的情况下FilesystemAdapter随 Larav
  • 在 symfony2 中为特定控制器设置 max_execution_time

    Using ini set 我可以扩展最大执行时间一个脚本的 在Symfony2 我可以添加ini set to web app php and web app dev php将增加的执行时间应用于所有控制器 但在这种情况下 我只想扩展最大
  • mongodb对话系统

    我正在实施一个verymongodb 上的简单对话系统 这个想法应该是 当我打开一个 convo 时 它应该显示发送和接收的消息 到目前为止一切正常 并且应该非常容易 通过使用像这样的伪代码这样的简单查询 from my id AND to
  • 如何在 Laravel 5.5 中编辑“页面因不活动而已过期”的视图

    在 Laravel 5 5 中 当您使用 CSRF 保护 默认情况下 并且在长时间不活动后发送发布请求时 您将收到此错误页面 屏幕截图 我对此错误表示同意 但是 我需要更改此错误的视图 文本以确保与我的应用程序风格和语言相匹配 关于如何编辑
  • 如何从字符串中只获取数字? [复制]

    这个问题在这里已经有答案了 我有这样的字符串 第 001 课 完成 在这种情况下 我只想获取数字部分001 我试过这个 str the title preg match all d str matches number implode ma
  • 使用 php 将 HLS Segment (ts) 视频转换并加入到 mp4

    你好我正在使用这个工具 https github com Ejz HLSDownloader https github com Ejz HLSDownloader将 HLS 视频片段从 m3u8 播放列表下载到 ts 文件中 不 我不知道如
  • 如何在 Laravel 5 中处理嵌套的 JSON 对象请求?

    我们在 Laravel 5 和 AngularJs Ionic 中运行此 Web 服务来处理 Web 当我们将请求从 Web 客户端 发送到 Web 服务 后端 时 我们传递了嵌套的 JSON 对象 我们在读取服务器端父对象下的所有子对象时
  • 登录后所有页面都应该是https吗?

    这有点难以解释 但我会尽力 有一个网站 每个页面上都有登录表单 其中包含用户名 密码字段 这些页面未使用 SSL 用户填写用户名 密码并提交表单后 表单将被发送到 https 的身份验证页面 对于这种情况我有几个疑问 向 https 页面提
  • URL 重写帮助

    RewriteEngine on RewriteCond REQUEST URI index php RewriteRule index php q 1 L 这应该将任何 url 重写为 index php q url 并且它可以工作 反正
  • 如何在 joomla 模块中通过 javascript 发送输入文件类型

    我想将带有 javascript 的文件发送到 php 文件 我的 php 文件中有这个表单
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • 在 MySQL 中搜索多个单词

    我使用 HTML 表单来允许用户查找数据库表中的条目
  • 如何将空字符串编组到单个标签

    我有我的对象 配置了代码 object setName 编组为以下 XML
  • php,in_array,0值

    我试图理解in array下一个场景的行为 arr array 2 gt Bye 52 77 3 gt Hey var dump in array 0 arr 返回值in array 是布尔值true 正如你所看到的no值等于0 所以有人可
  • 如何使用 PDO 动态构建查询

    我正在使用 PDO 并想做这样的事情 query dbh gt prepare SELECT FROM table WHERE column value query gt bindParam table tableName query gt
  • 转换MAC地址格式

    我刚刚编写了一个小脚本 从交换机中提取数百个 MAC 地址进行比较 但它们的格式为 0025 9073 3014 而不是标准的 00 25 90 73 30 14 我对如何转换它感到困惑 我能想到的最好的办法就是在 处将它们分解成碎片 然后
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • sqlsrv_num_rows 不返回任何值

    我正在尝试获取查询中返回的行数 while 循环遍历结果有效 但由于某种原因 sqlsrv num rows 不返回任何值 result SELECT from dtable WHERE id2 apple query sqlsrv que
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建

随机推荐

  • Android 中获取相邻单元格返回 null

    我正在尝试获取 Android 中的相邻小区信息 但该功能getNeighboringCellInfo 总是返回 null 我使用了以下代码 protected void getCellInfo TelephonyManager telep
  • 动态创建包含子查询的 Linq 表达式

    我最近偶然发现了在运行时动态创建 Linq 表达式的问题 我发现的大多数示例都处理相当简单的任务 即仅将给定数据库实体的一个属性与单个参数进行比较 就像这样 Session Query Where m gt m Name Contains
  • 为什么 LINQ .Where(predicate).First() 比 .First(predicate) 更快?

    我正在做一些性能测试 并注意到像这样的 LINQ 表达式 result list First f gt f Id i Property 慢于 result list Where f gt f Id i First Property 这似乎违
  • joomla 垃圾邮件机器人错误

    在 joomla 2 5 中使用 widgetkit 地图 yotheme 的外部组件 当我插入电子邮件地址时 joomla 会检测到并给出此错误 该电子邮件地址已受到垃圾邮件机器人的保护 您需要启用 JavaScript 才能查看它 Ja
  • 集合已修改;枚举操作可能无法执行[重复]

    这个问题在这里已经有答案了 这个问题在这个论坛上被问过很多次了 我知道问题的解决方案 但我很好奇为什么 修改集合时无法执行枚举操作 List
  • 删除 pandas 数据框中未命名的列[重复]

    这个问题在这里已经有答案了 我有一个来自 A G 列的数据文件 如下所示 但是当我使用pd read csv data csv 它打印一个额外的unnamed无缘无故地列在最后 colA ColB colC colD colE colF c
  • 以编程方式在 IIS 中启用或禁用匿名身份验证

    我有一个 Web 应用程序 我需要为其用户提供将登录方法从 FormsAuth 切换到 WindowsAuth 的选项 我设法通过代码更改 web config 文件 Configuration config WebConfiguratio
  • 重用函数而无需实例化新类的最简单方法

    我目前有一个如下所示的函数 public void AnimateLayoutTransform object ControlToAnimate Does some stuff 我在很多不同的项目中使用这个函数 所以我希望它具有很强的可重用
  • 线程终止问题(C 编程)

    我正在开发一个使用 C 语言的 Linux 应用程序 它使用多个线程 由主函数生成的线程完成大部分工作 因此通常最后完成 我看到一些奇怪的行为 我相信这是由于主线程在生成的线程有机会完成其工作之前终止 下面是一些示例代码来说明我正在讨论的内
  • 详细订单中的 Woocommerce Short_Description

    我正在使用 Wordpress 和 Woocommerce 创建我的新网站 我想在订单详细信息中显示简短的描述 我找到了这段代码 add action woocommerce after shop loop item title wooco
  • 将设计添加到plotLabel Highcharts

    我正在制作 highchart 上的动态图表 我的问题是 有没有办法在我的绘图标签上添加设计 目前是这样的 我希望它看起来像这样 这是我的代码 function Highcharts setOptions global useUTC fal
  • Google App Engine + jQuery Ajax = 405 方法不允许

    必须有人能够解释我在这里做错了什么 我正在尝试创建最简单的 AJAX 发布到 Google App Engine 应用程序的示例 但我失败了 这是应用程序Python import cgi from google appengine api
  • 在 main 方法中使用 SwingUtilities.invokeLater()

    我最近看到一个MVC java应用程序 其中main方法编写为 public static void main String args SwingUtilities invokeLater new Runnable public void
  • Android:带有来自 attrs.xml 的对象引用的自定义视图,始终为 null

    我正在尝试设置对象之间的关系层次结构 每个对象都有一个与其自身类型相同的父对象 或者null 我有一个main xml其中包含其中一些
  • contenteditable div 内的 XY 插入坐标

    我正在寻找一种方法来获取 contenteditable div 内的插入符 x y 坐标 其方式与使用 window event 获取鼠标坐标类似 因为我需要在用户使用插入符的位置打开一个弹出窗口在 contenteditable div
  • 如何检查函数中多个变量中是否至少有一个等于 1?

    我有多个响应数据 这些数据已使用 cSplit e 分成单独的列 格式如下 ID Response IM2 IM4 IM10 IM16 1 1 4 7 10 NA 1 1 NA 2 2 7 5 16 8 NA NA NA 1 3 3 2 1
  • 使用 google fit api 的卡路里消耗

    我正在开发健身应用程序 为此我使用了 google fit api 到目前为止 我成功地获取了步数 距离 但无法获取卡路里消耗 提前致谢 您需要先设置用户的体重和身高 使用此信息计算消耗的卡路里 这些是我用来做到这一点的方法 mClient
  • 在Android中选择同一布局中的EditText时如何关注Webview?

    我一直在尝试在布局中添加 EditTexts 和 WebView 问题在于专注于 WebView 在决定再次询问之前 我尝试查看网络和 Stackoverflow 上的答案 在网络视图中 我有一些字段需要填写 这些字段是通过 POST 发送
  • 动态扩展 json 中的所有列表和记录

    我想展开 json 响应中的所有列表和记录 列就像例如 这是动态的 也可以是10条记录和5个列表 文本 文本 列表 列表 文本 记录 记录 字符串 记录 我编写了一个函数来获取具有特定类型的所有列 Cn GetAllColumnsWithT
  • 使用 PHP 解析带有命名空间的 SOAP XML 响应

    我有一个丑陋的 XML 上面有很多命名空间 当我尝试使用 simpleXML 加载它时 如果我指示第一个命名空间 我会得到一个 xml 对象 但后面带有其他命名空间的标签不会使其到达该对象 这是 SOAP 响应