web-dev-qa-db-ja.com

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
);

ジオネームから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を見るとわかるように、オブジェクトを返します。値を取得するにはどうすればよいですか?

180
kubas

SimpleXMLオブジェクトを文字列にキャストする必要があります。

$value = (string) $xml->code[0]->lat;
402
Luis Melgratti

マジックメソッド__toString()を使用することもできます

$xml->code[0]->lat->__toString()
81
sglessard

XML要素の値が浮動小数点数(緯度、経度、距離)であることがわかっている場合は、(float)を使用できます

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

また、整数の(int)

$value = (int) $xml->code[0]->distance;
16
CoursesWeb

do n't 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を返すため、値が数値かどうかを判断する必要がある場合に機能します。

13
vladkras

私にとって、オブジェクトよりも配列を使用する方が簡単です、

そこで、Xml-Objectを変換し、

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

「{}」を使用してプロパティにアクセスし、必要に応じて実行できます。保存するか、コンテンツを表示します。

    $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'];
               ....

            }     

        }
2
Zakaria Charik

current($xml->code[0]->lat)を試してください

配列の現在のポインターの下の要素を返します。これは0なので、値を取得します

1
Bendeberia

これは、XMLに関連する値を配列に変換するのに常に役立つ関数です

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

    return $out;
}
1
pal4life

この関数で配列を変換できます

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;
}
0
nixis
$codeZero = null;
foreach ($xml->code->children() as $child) {
   $codeZero = $child;
}

$lat = null;
foreach ($codeZero->children() as $child) {
   if (isset($child->lat)) {
      $lat = $child->lat;
   }
}
0
craned
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/>';
}
0
Şahin Solmaz