복붙노트

SimpleXMLElement 객체에서 값 가져 오기

PHP

SimpleXMLElement 객체에서 값 가져 오기

나는 이런 것을 가지고있다 :

$url = "http://ws.geonames.org/findNearbyPostalCodes?country=pl&placename=";
$url .= rawurlencode($city[$i]);

$xml = simplexml_load_file($url);
echo $url."\n";
$cityCode[] = array(
    'city' => $city[$i], 
    'lat' => $xml->code[0]->lat, 
    'lng' => $xml->code[0]->lng
);

geonames에서 XML을 다운로드해야합니다. print_r ($ xml)을하면 다음과 같은 결과를 얻습니다.

SimpleXMLElement Object
(
    [code] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [postalcode] => 01-935
                    [name] => Warszawa
                    [countryCode] => PL
                    [lat] => 52.25
                    [lng] => 21.0
                    [adminCode1] => SimpleXMLElement Object
                        (
                        )

                    [adminName1] => Mazowieckie
                    [adminCode2] => SimpleXMLElement Object
                        (
                        )

                    [adminName2] => Warszawa
                    [adminCode3] => SimpleXMLElement Object
                        (
                        )

                    [adminName3] => SimpleXMLElement Object
                        (
                        )

                    [distance] => 0.0
                )

나는 $ xml-> code [0] -> lat를 볼 수 있고 객체를 리턴한다. 어떻게 가치를 얻을 수 있습니까?

해결법

  1. ==============================

    1.simpleXML Object를 문자열로 캐스팅해야합니다.

    simpleXML Object를 문자열로 캐스팅해야합니다.

    $value = (string) $xml->code[0]->lat;
    
  2. ==============================

    2.마법 메서드 __toString ()을 사용할 수도 있습니다.

    마법 메서드 __toString ()을 사용할 수도 있습니다.

    $xml->code[0]->lat->__toString()
    
  3. ==============================

    3.XML 엘리먼트의 값이 float 숫자 (위도, 경도, 거리)라면, (float)

    XML 엘리먼트의 값이 float 숫자 (위도, 경도, 거리)라면, (float)

    $value = (float) $xml->code[0]->lat;
    

    정수의 경우 (int) :

    $value = (int) $xml->code[0]->distance;
    
  4. ==============================

    4.XML 요소의 가치를 모르는 경우

    XML 요소의 가치를 모르는 경우

    $value = (string) $xml->code[0]->lat;
    
    if (ctype_digit($value)) {
        // the value is probably an integer because consists only of digits
    }
    

    (string)은 항상 문자열을 반환하고 is_int ($ value)는 false를 반환하기 때문에 값이 숫자인지 확인해야 할 때 작동합니다.

  5. ==============================

    5.나를 위해 객체보다 배열을 사용하기가 더 쉽다.

    나를 위해 객체보다 배열을 사용하기가 더 쉽다.

    그래서, 나는 Xml-Object를 변환한다.

    $xml = simplexml_load_file('xml_file.xml');    
    $json_string = json_encode($xml);    
    $result_array = json_decode($json_string, TRUE);
    
  6. ==============================

    6.'{}'을 사용하여 속성에 액세스 한 다음 원하는대로 할 수 있습니다. 저장하거나 내용을 표시하십시오.

    '{}'을 사용하여 속성에 액세스 한 다음 원하는대로 할 수 있습니다. 저장하거나 내용을 표시하십시오.

        $varName = $xml->{'key'};
    

    당신의 예제에서 그녀는 코드입니다.

            $filePath = __DIR__ . 'Your path ';
            $fileName = 'YourFilename.xml';
    
            if (file_exists($filePath . $fileName)) {
                $xml = simplexml_load_file($filePath . $fileName);
                $mainNode = $xml->{'code'};
    
                $cityArray = array();
    
                foreach ($mainNode as $key => $data)        {
                   $cityArray[..] = $mainNode[$key]['cityCode'];
                   ....
    
                }     
    
            }
    
  7. ==============================

    7.이 함수는 항상 XML 관련 값을 배열로 변환하는 데 도움이되는 함수입니다.

    이 함수는 항상 XML 관련 값을 배열로 변환하는 데 도움이되는 함수입니다.

    function _xml2array ( $xmlObject, $out = array () ){
        foreach ( (array) $xmlObject as $index => $node )
            $out[$index] = ( is_object ( $node ) ) ? _xml2array ( $node ) : $node;
    
        return $out;
    }
    
  8. ==============================

    8.current ($ xml-> code [0] -> lat)를 시도해보십시오.

    current ($ xml-> code [0] -> lat)를 시도해보십시오.

    배열의 현재 포인터 아래에있는 요소를 반환합니다.이 값은 0이므로 값을 얻을 수 있습니다.

  9. ==============================

    9.

    header("Content-Type: text/html; charset=utf8");
    $url  = simplexml_load_file("http://URI.com");
    
     foreach ($url->PRODUCT as $product) {  
        foreach($urun->attributes() as $k => $v) {
            echo $k." : ".$v.' <br />';
        }
        echo '<hr/>';
    }
    
  10. ==============================

    10.이 함수를 사용하여 배열을 변환 할 수 있습니다.

    이 함수를 사용하여 배열을 변환 할 수 있습니다.

    function xml2array($xml){
    $arr = array();
    
    foreach ($xml->children() as $r)
    {
        $t = array();
        if(count($r->children()) == 0)
        {
            $arr[$r->getName()] = strval($r);
        }
        else
        {
            $arr[$r->getName()][] = xml2array($r);
        }
    }
    return $arr;
    }
    
  11. ==============================

    11.

    $codeZero = null;
    foreach ($xml->code->children() as $child) {
       $codeZero = $child;
    }
    
    $lat = null;
    foreach ($codeZero->children() as $child) {
       if (isset($child->lat)) {
          $lat = $child->lat;
       }
    }
    
  12. ==============================

    12.

    foreach($xml->code as $vals )
    { 
        unset($geonames);
        $vals=(array)$vals;
        foreach($vals as $key => $value)
          {
            $value=(array)$value;
            $geonames[$key]=$value[0];
          }
    }
    print_r($geonames);
    
  13. from https://stackoverflow.com/questions/2867575/get-value-from-simplexmlelement-object by cc-by-sa and MIT license