Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用名称空间从XML中提取数据_Php_Xml - Fatal编程技术网

Php 使用名称空间从XML中提取数据

Php 使用名称空间从XML中提取数据,php,xml,Php,Xml,我尝试使用下面的代码从下面的XML中提取数据,但得到了一个空字符串 XML 你可以这样做 问题:$nodes[0]>返回此语句将返回一个对象而不是字符串 由于的内容已经是XML,因此不必将其作为字符串读取然后转换,您的第一个simplexml加载字符串已经完成了所有工作。您可以直接从XPath访问该值 $doc = simplexml_load_string($response); $doc->registerXPathNamespace('ns2', 'http://booking.u

我尝试使用下面的代码从下面的XML中提取数据,但得到了一个空字符串

XML
你可以这样做

问题:
$nodes[0]>返回此语句将返回一个对象而不是字符串

由于
的内容已经是XML,因此不必将其作为字符串读取然后转换,您的第一个simplexml加载字符串已经完成了所有工作。您可以直接从XPath访问该值

$doc = simplexml_load_string($response);
$doc->registerXPathNamespace('ns2', 'http://booking.us.org/');
$airlineName = $doc->xpath('//ns2:checkbalanceresponse/return/Balance/Airline/AirlineName')[0];
echo $airlineName;
更新:完整代码-根据问题

<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );

include_once("simple_html_dom.php");
$response = <<< XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<s:envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
      <s:body>
           <ns2:checkbalanceresponse xmlns:ns2="http://booking.us.org/">
                <return>
                     "<Balance><Airline><AirlineName>BUDDHA AIR</AirlineName><AgencyName>GANDAKI INTERNATIONAL TRAVELS KTM(STO)</AgencyName><BalanceAmount>5555</BalanceAmount></Airline></Balance>"
                 </return>
            </ns2:checkbalanceresponse>
       </s:body>
 </s:envelope>
XML;

$doc = simplexml_load_string($response);
$doc->registerXPathNamespace('ns2', 'http://booking.us.org/');
$airlineName = $doc->xpath('//ns2:checkbalanceresponse/return/Balance/Airline/AirlineName')[0];
echo $airlineName;

试过了。但是航空公司的名字被退回了。但是航空公司名称返回空值,与您在上面发布的XML完全相同-这返回“BUDDHA AIR”
$doc = simplexml_load_string($string);
$doc->registerXPathNamespace('ns2', 'http://booking.us.org/');
$nodes = $doc->xpath('//ns2:checkbalanceresponse');
$nodes=$nodes[0]->return; //here $nodes gives you an object instead of html

echo $nodes->Balance->Airline->AirlineName;
$doc = simplexml_load_string($response);
$doc->registerXPathNamespace('ns2', 'http://booking.us.org/');
$airlineName = $doc->xpath('//ns2:checkbalanceresponse/return/Balance/Airline/AirlineName')[0];
echo $airlineName;
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );

include_once("simple_html_dom.php");
$response = <<< XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<s:envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
      <s:body>
           <ns2:checkbalanceresponse xmlns:ns2="http://booking.us.org/">
                <return>
                     "<Balance><Airline><AirlineName>BUDDHA AIR</AirlineName><AgencyName>GANDAKI INTERNATIONAL TRAVELS KTM(STO)</AgencyName><BalanceAmount>5555</BalanceAmount></Airline></Balance>"
                 </return>
            </ns2:checkbalanceresponse>
       </s:body>
 </s:envelope>
XML;

$doc = simplexml_load_string($response);
$doc->registerXPathNamespace('ns2', 'http://booking.us.org/');
$airlineName = $doc->xpath('//ns2:checkbalanceresponse/return/Balance/Airline/AirlineName')[0];
echo $airlineName;
BUDDHA AIR