PHP如何从WebService返回的XML字符串对象中获取supplierCode属性值
如何从WebService返回的XML结果中提取supplierCode属性?
嘿,我来帮你搞定这个问题!你调用WebService后得到的$result对象里,SubmitXmlStringResult字段是一段XML字符串,咱们得先解析这段XML才能拿到supplierCode的值。下面给你两种实用的方法:
先回顾下你的代码和返回结果
你的调用代码:
global $s; global $params; $s = new soapclient($conDetails['url'], array('wsdl')); $params = new stdClass; $paramsStr = ' <LoginInput> <LoginRec Action="SuppAuthn" UserEmail="'.$email.'" UserPass="'.$password.'" /> </LoginInput> '; $params->xmlRequest = $paramsStr; $result = $s->__call("SubmitXmlString", array($params));
返回的输出内容:
object(stdClass)#3 (1) { ["SubmitXmlStringResult"]=> string(496) "<LoginOutput> <Login UsrId="XX" UsrName="Some Name" SessionId="10" supplierCode="2" supplierName="Supp name" supplierEmail=""/> <Countries> <country code="DE" name="Germany"/> <country code="ES" name="Spain"/> <country code="FR" name="France"/> </Countries> </LoginOutput> " } bool(true)
方法一:使用SimpleXML(简单快捷)
SimpleXML是PHP里解析XML最简便的方式之一,代码如下:
// 第一步:取出XML字符串 $xmlString = $result->SubmitXmlStringResult; // 第二步:加载XML字符串为SimpleXMLElement对象 $xml = simplexml_load_string($xmlString); // 第三步:获取supplierCode属性值(注意转成字符串,避免返回对象) $supplierCode = (string)$xml->Login['supplierCode']; // 验证结果 echo $supplierCode; // 会输出:2
解释一下:$xml->Login对应XML里的<Login>节点,['supplierCode']用来访问这个节点的属性,最后转成字符串是因为SimpleXML的属性返回的是SimpleXMLElement对象,直接输出也能显示值,但转成字符串更稳妥。
方法二:使用DOMDocument + XPath(更灵活,适合复杂XML)
如果你的XML结构以后可能变复杂,用DOM结合XPath会更灵活:
// 第一步:取出XML字符串 $xmlString = $result->SubmitXmlStringResult; // 第二步:初始化DOMDocument并加载XML $dom = new DOMDocument(); // 忽略XML里的空白和格式问题,避免解析报错 $dom->loadXML($xmlString, LIBXML_NOBLANKS); // 第三步:用XPath定位节点 $xpath = new DOMXPath($dom); // 查找根节点下的<Login>节点 $loginNode = $xpath->query('/LoginOutput/Login')->item(0); // 第四步:获取属性值 if ($loginNode) { $supplierCode = $loginNode->getAttribute('supplierCode'); echo $supplierCode; // 输出:2 } else { echo "未找到Login节点"; }
这种方法适合需要更复杂节点查询的场景,比如多个同名节点或者深层嵌套的结构。
内容的提问来源于stack exchange,提问作者Roi
相关产品推荐
相关产品推荐

