2017-08-25 43 views
1

我是PHP新手,需要幫助。我有一個變量$輸出存儲從服務器收到的XML響應。我如何將「值」數據分配給一個變量。例如,$ devicesn =「db00-0030-6602-xxxx」。 Bellow是我在回顯$ output變量並在瀏覽器中使用「view source」時得到的XML響應。如何從包含XML數據的變量中提取子字符串PHP

<?xml version="1.0" encoding="utf-8"?> 
<simsrv version="1.0" msg_type="response"> 
<header> 
    <param name="SN" value="0" /> 
    <param name="Domain" value="default" /> 
    <param name="User" value="admin" /> 
    <param name="Cmd" value="GetDeviceInfo" /> 
    <param name="Retries" value="0" /> 
    <param name="Timeout" value="5000" /> 
    <param name="Timestamp" value="NA" /> 
    <param name="AuthInfo" value="39ef0f02a9f4d5799481a8d6f2897a0b" /> 
    <param name="ErrorCode" value="SUCCESS" /> 
    <param name="ErrorInfo" value="NA" /> 
    <param name="ProcessTime" value="1" /> 
</header> 
<GetDeviceInfo> 
    <param name="BeginDeviceId" value="0" /> 
    <param name="MaxGetCount" value="2" /> 
    <param name="No" value="0" /> 
    <param name="DeviceId" value="1" /> 
    <param name="DeviceSn" value="db00-0030-6602-xxxx" /> 
    <param name="DeviceAlias" value="DWG-16A" /> 
    <param name="DeviceType" value="DWG2000F " /> 
    <param name="MaxPortCount" value="16" /> 
    <param name="AdminStatus" value="ENABLED" /> 
    <param name="RunStatus" value="COMM_FAIL" /> 
</GetDeviceInfo> 
<GetDeviceInfo> 
    <param name="BeginDeviceId" value="0" /> 
    <param name="MaxGetCount" value="2" /> 
    <param name="No" value="1" /> 
    <param name="DeviceId" value="2" /> 
    <param name="DeviceSn" value="db00-0030-1501-xxxx" /> 
    <param name="DeviceAlias" value="DWG-16B" /> 
    <param name="DeviceType" value="DWG2000B " /> 
    <param name="MaxPortCount" value="16" /> 
    <param name="AdminStatus" value="ENABLED" /> 
    <param name="RunStatus" value="ACTIVE" /> 
</GetDeviceInfo> 
</simsrv> 
+0

你想要一個特定的或所有變量標籤? –

+0

也許這可以幫助你https://stackoverflow.com/questions/9703530/extract-xml-elements-with-php –

回答

0

最好的方法是使用simplexml_load_string的xml,然後將其用作對象。

<?php 
$xml=simplexml_load_string($output) 
$devicesn = $xml-> GetDeviceInfo[0]-> DeviceSn; 
echo $devicesn; 
?> 
0

的SimpleXML使得PHP的XML處理非常簡單(假設你並不需要所有的褶邊等),本例中加載已檢索到的內容,然後再執行foreach在輸入每個設備。然後爲每個設備它檢索幾個使用XPath的細節(要找到在name正確的標籤細節)

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

$xmlText =<<<XML 
<?xml version="1.0" encoding="utf-8"?> 
<simsrv version="1.0" msg_type="response"> 
<header> 
    <param name="SN" value="0" /> 
    <param name="Domain" value="default" /> 
    <param name="User" value="admin" /> 
    <param name="Cmd" value="GetDeviceInfo" /> 
    <param name="Retries" value="0" /> 
    <param name="Timeout" value="5000" /> 
    <param name="Timestamp" value="NA" /> 
    <param name="AuthInfo" value="39ef0f02a9f4d5799481a8d6f2897a0b" /> 
    <param name="ErrorCode" value="SUCCESS" /> 
    <param name="ErrorInfo" value="NA" /> 
    <param name="ProcessTime" value="1" /> 
</header> 
<GetDeviceInfo> 
    <param name="BeginDeviceId" value="0" /> 
    <param name="MaxGetCount" value="2" /> 
    <param name="No" value="0" /> 
    <param name="DeviceId" value="1" /> 
    <param name="DeviceSn" value="db00-0030-6602-xxxx" /> 
    <param name="DeviceAlias" value="DWG-16A" /> 
    <param name="DeviceType" value="DWG2000F " /> 
    <param name="MaxPortCount" value="16" /> 
    <param name="AdminStatus" value="ENABLED" /> 
    <param name="RunStatus" value="COMM_FAIL" /> 
</GetDeviceInfo> 
<GetDeviceInfo> 
    <param name="BeginDeviceId" value="0" /> 
    <param name="MaxGetCount" value="2" /> 
    <param name="No" value="1" /> 
    <param name="DeviceId" value="2" /> 
    <param name="DeviceSn" value="db00-0030-1501-xxxx" /> 
    <param name="DeviceAlias" value="DWG-16B" /> 
    <param name="DeviceType" value="DWG2000B " /> 
    <param name="MaxPortCount" value="16" /> 
    <param name="AdminStatus" value="ENABLED" /> 
    <param name="RunStatus" value="ACTIVE" /> 
</GetDeviceInfo> 
</simsrv> 
XML; 

$xml = new SimpleXMLElement ($xmlText); 

foreach ($xml->GetDeviceInfo as $device) { 
    $deviceSn = $device->xpath("param[@name='DeviceSn']/@value"); 
    $deviceAlias = $device->xpath("param[@name='DeviceAlias']/@value"); 
    echo "DeviceSn=".(string)$deviceSn[0]. 
      " Alias=".(string)$deviceAlias[0].PHP_EOL; 
} 

與樣本數據,這將產生...

DeviceSn=db00-0030-6602-xxxx Alias=DWG-16A 
DeviceSn=db00-0030-1501-xxxx Alias=DWG-16B 

你可以獲取所有的細節,並建立使用它們的關聯數組...

$xml = new SimpleXMLElement ($xmlText); 
$devices = []; 
foreach ($xml->GetDeviceInfo as $device) { 
    $newDevice = []; 
    foreach ($device->param as $element) { 
     $newDevice[(string)$element['name']] = (string)$element['value']; 
    } 
    $devices[] = $newDevice; 
} 
print_r($devices); 
相關問題