[英]Extract Data from XML with namespace
我嘗試使用下面的代碼從 XML 下方提取數據,但得到了一個空字符串。
<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>
$doc = simplexml_load_string($response);
$doc->registerXPathNamespace('ns2', 'http://booking.us.org/');
$nodes = $doc->xpath('//ns2:checkbalanceresponse');
$nodes = $nodes[0]->return;
$obj = simplexml_load_string($nodes);
var_dump($obj->Balance->Airline->AirlineName); //null
你可以這樣做。
問題:
$nodes[0]->return;
此語句將返回一個對象而不是字符串。
$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;
由於<return>
內容已經是 XML,因此不必將其作為字符串讀取然后進行轉換,您的第一個 simplexml_load_string 已經完成了所有工作。 您可以直接從 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;
輸出...
BUDDHA AIR
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.