我在服务器上调用PHP cURL方法,响应是XML类型。 cURL在标量类型变量中保存输出(在删除标记之后)。有没有办法将它存储在数据库中以便于解析?
<Response status="OK" responseTime="10">
<Results>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0007556251</frn>
<providerName>Time Warner Cable LLC</providerName>
<doingBusinessAs>Time Warner Cable</doingBusinessAs>
<holdingCompanyNumber>131352</holdingCompanyNumber>
<holdingCompanyName>Time Warner Cable Inc.</holdingCompanyName>
<providerURL>www.timewarnercable.com</providerURL>
<technologies>
<technologyCode>40</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>9</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>5</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>3.00</technologyQuality>
<providerQuality>3.00</providerQuality>
<downloadQuality>1.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>3.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0003469442</frn>
<providerName>Verizon New York Inc.</providerName>
<doingBusinessAs>Verizon New York</doingBusinessAs>
<holdingCompanyNumber>131425</holdingCompanyNumber>
<holdingCompanyName>Verizon Communications Inc.</holdingCompanyName>
<providerURL>www.connecttoverizon.com</providerURL>
<technologies>
<technologyCode>10</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>5</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>3</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>2.00</technologyQuality>
<providerQuality>2.00</providerQuality>
<downloadQuality>0.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>2.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<broadbandSource>
<stateFips>36</stateFips>
<organization>The New York State Office of Cyber Security</organization>
<organizationURL>http://www.cscic.state.ny.us/broadband/</organizationURL>
</broadbandSource>
</Results>
</Response>
我的答案。
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $request_url);
curl_setopt($curl, CURLOPT_TIMEOUT, 130);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
curl_close($curl);
$xml = simplexml_load_string($response);
$json = json_encode($xml);
$arr = json_decode($json,true);
答案 0 :(得分:0)
你可以这样做。遍历所有数组以获取有线服务的所有值。这将导致2条记录。将所有值插入字符串并将字符串放入数组中。
查询我们的数据库。我告诉你,每个值都有一个列。并使用我们的字符串将数组内置到我们的db中。
当然,您需要更改表名,并且必须使用连接数据。
<?php
$xmlstr = '<Response status="OK" responseTime="10">
<Results>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0007556251</frn>
<providerName>Time Warner Cable LLC</providerName>
<doingBusinessAs>Time Warner Cable</doingBusinessAs>
<holdingCompanyNumber>131352</holdingCompanyNumber>
<holdingCompanyName>Time Warner Cable Inc.</holdingCompanyName>
<providerURL>www.timewarnercable.com</providerURL>
<technologies>
<technologyCode>40</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>9</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>5</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>3.00</technologyQuality>
<providerQuality>3.00</providerQuality>
<downloadQuality>1.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>3.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<wirelineServices>
<blockFIPS>360775908001027</blockFIPS>
<frn>0003469442</frn>
<providerName>Verizon New York Inc.</providerName>
<doingBusinessAs>Verizon New York</doingBusinessAs>
<holdingCompanyNumber>131425</holdingCompanyNumber>
<holdingCompanyName>Verizon Communications Inc.</holdingCompanyName>
<providerURL>www.connecttoverizon.com</providerURL>
<technologies>
<technologyCode>10</technologyCode>
<typicalDownloadSpeed>0</typicalDownloadSpeed>
<typicalUploadSpeed>0</typicalUploadSpeed>
<maximumAdvertisedDownloadSpeed>5</maximumAdvertisedDownloadSpeed>
<maximumAdvertisedUploadSpeed>3</maximumAdvertisedUploadSpeed>
<overallQuality>1</overallQuality>
<speedQuality>1.00</speedQuality>
<technologyQuality>2.00</technologyQuality>
<providerQuality>2.00</providerQuality>
<downloadQuality>0.00</downloadQuality>
<uploadQuality>1.00</uploadQuality>
<maximumProviderScore>3.00</maximumProviderScore>
<maximumTechnologyScore>2.00</maximumTechnologyScore>
<maximumSpeedScore>2.00</maximumSpeedScore>
<maximumDownloadScore>2.00</maximumDownloadScore>
<maximumUploadScore>2.00</maximumUploadScore>
</technologies>
</wirelineServices>
<broadbandSource>
<stateFips>36</stateFips>
<organization>The New York State Office of Cyber Security</organization>
<organizationURL>http://www.cscic.state.ny.us/broadband/</organizationURL>
</broadbandSource>
</Results>
</Response>';
$xml = simplexml_load_string($xmlstr);
$json = json_encode($xml);
$arrays = json_decode($json,true);
//this is what your array looks like
echo "<pre>";
print_r($arrays);
$counter = 0;
// get all values inside wirelineServices
foreach($arrays['Results']['wirelineServices'] AS $nbr => $arr){
//start of the input string
$insert[$counter] = "(";
//iterate through $arr
foreach($arr AS $key => $value){
//if value is array iterate through $value
if(is_array($value)){
foreach($value AS $key2 => $value2){
$insert[$counter] .= "'" . $value2 . "', ";
}
} else {
$insert[$counter] .= "'" . $value . "', ";
}
}
//remove last ', ' from string.
$insert[$counter] = substr($insert[$counter], 0, -2) . ")";
//start new string
$counter++;
$sql = "INSERT INTO `table` (`blockFIPS`, `frn`,`providerName`,`doingBusinessAs`,`holdingCompanyNumber`,`holdingCompanyName`,`providerURL`,`technologyCode`,`typicalDownloadSpeed`,`typicalUploadSpeed`,`maximumAdvertisedDownloadSpeed`,
`maximumAdvertisedUploadSpeed`,`overallQuality`,`speedQuality`,`technologyQuality`,`providerQuality`,`downloadQuality`,`uploadQuality`,`maximumProviderScore`,`maximumTechnologyScore`,`maximumSpeedScore`,`maximumDownloadScore`,
`maximumUploadScore`) VALUES " . implode(",",$insert); . "";
if (mysqli_query($connect, $sql)) {
echo 'Records created successfull';
} else {
echo $sql . '"<br>"' . mysqli_error($connect);
}
?>