首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将多个xml属性解析为php变量?

如何将多个xml属性解析为php变量?
EN

Stack Overflow用户
提问于 2016-06-04 19:03:15
回答 1查看 73关注 0票数 0

我使用下面的PHP代码将xml属性提取到一个php变量。

代码语言:javascript
复制
$dataPOST= '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c2b="http://cps.huawei.com/cpsinterface/c2bpayment">
   <soapenv:Header/>
   <soapenv:Body>
      <c2b:C2BPaymentConfirmationRequest>
         <TransactionType>PayBill</TransactionType>
         <TransID>1234560000007031</TransID>
         <TransTime>20140227082020</TransTime>
         <TransAmount>123.00</TransAmount>
         <BusinessShortCode>12345</BusinessShortCode>
         <BillRefNumber>TX1001</BillRefNumber>
         <InvoiceNumber></InvoiceNumber>
         <OrgAccountBalance>12345.00</OrgAccountBalance>
         <ThirdPartyTransID></ThirdPartyTransID>
         <MSISDN>254722703614</MSISDN>
         <KYCInfo>
            <KYCName>[Personal Details][First Name]</KYCName>
            <KYCValue>Hoiyor</KYCValue>
        </KYCInfo>
        <KYCInfo>
            <KYCName>[Personal Details][Middle Name]</KYCName>
            <KYCValue>G</KYCValue>
        </KYCInfo>
        <KYCInfo>
            <KYCName>[Personal Details][Last Name]</KYCName>
            <KYCValue>Chen</KYCValue>
        </KYCInfo>
      </c2b:C2BPaymentConfirmationRequest>
   </soapenv:Body>
</soapenv:Envelope>';

$xml = @simplexml_load_string($dataPOST);
$xml->registerXPathNamespace("soap","http://schemas.xmlsoap.org/soap/envelope/");
$xml->registerXPathNamespace ("c2b", "http://cps.huawei.com/cpsinterface/c2bpayment");

$xml2 = $xml->xpath("//soap:Envelope/soap:Body/c2b:C2BPaymentConfirmationRequest");

$TransactionType = (string) $xml2[0]->TransactionType;
$TransID = (string) $xml2[0]->TransID;
$TransTime = (string) $xml2[0]->TransTime;
$TransAmount = (string) $xml2[0]->TransAmount;
$BusinessShortCode = (string) $xml2[0]->BusinessShortCode;
$BillRefNumber = (string) $xml2[0]->BillRefNumber;
$InvoiceNumber = (string) $xml2[0]->InvoiceNumber;
$OrgAccountBalance = (string) $xml2[0]->OrgAccountBalance;
$ThirdPartyTransID = (string) $xml2[0]->ThirdPartyTransID;
$MSISDN = (string) $xml2[0]->MSISDN;

echo 'TransactionType: '.$TransactionType.'<br/>';
echo 'TransID: '.$TransID.'<br/>';
echo 'TransTime: '.$TransTime.'<br/>';
echo 'TransAmount: '.$TransAmount.'<br/>';
echo 'BusinessShortCode: '.$BusinessShortCode.'<br/>';
echo 'BillRefNumber: '.$BillRefNumber.'<br/>';
echo 'InvoiceNumber: '.$InvoiceNumber.'<br/>';
echo 'OrgAccountBalance: '.$OrgAccountBalance.'<br/>';
echo 'ThirdPartyTransID: '.$ThirdPartyTransID.'<br/>';
echo 'MSISDN: '.$MSISDN.'<br/>';

这段代码运行良好,我能够从xml中提取大多数属性,但现在我正在努力处理最后几个属性。我应该如何处理xml的以下部分,并将其解析为PHP变量?

代码语言:javascript
复制
<KYCInfo>
        <KYCName>[Personal Details][First Name]</KYCName>
        <KYCValue>Hoiyor</KYCValue>
    </KYCInfo>
    <KYCInfo>
        <KYCName>[Personal Details][Middle Name]</KYCName>
        <KYCValue>G</KYCValue>
    </KYCInfo>
    <KYCInfo>
        <KYCName>[Personal Details][Last Name]</KYCName>
        <KYCValue>Chen</KYCValue>
    </KYCInfo>
EN

回答 1

Stack Overflow用户

发布于 2016-06-04 20:01:57

您可以查询$xml2变量中保存的DOM:

代码语言:javascript
复制
$query = './KYCInfo';
$elements = $xml2[0]->xpath($query);
foreach ($elements as $element) {
    print $element->KYCName . PHP_EOL;
    print $element->KYCValue . PHP_EOL;
}

这应该会导致

代码语言:javascript
复制
[Personal Details][First Name]
Hoiyor
[Personal Details][Middle Name]
G
[Personal Details][Last Name]
Chen

您可以将其分配给变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37629407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档