2016-04-14 20 views
0

İstediğim verileri ayrıştırabilirim ancak verileri istediğim şekilde biçimlendirmeye çalışırken sorunlarım var.SimpleXML Yardım Gerekli

XML veri:

<home> 
<data number="1" name="John" color="Red"/> 
<data number="2" name="Jim" color="Blue"/> 
<data number="3" name"Bob" color="Black"/> 
</home> 

PHP Kodu: buradan Yani

foreach ($xml->home->data as $info){ 
$number = $info['number']; 
$name = $info['name']; 
$color = $info['color']; 
mysql insert into database code here 
} 

ne yapmak istediğinizi içine ben bunu takabilirsiniz böylece tek bir değişken içine her giriş birleştirmek olduğunu benim veritabanım.

aşağıda gibi veritabanına bu eklemek istediğiniz:

1. John(Red) 
2. Jim(Blue) 
3. Bob(Black) 

Ve sadece yerine her satırın bir giriş/satır olarak böyle takın bulunan her XML Verileri için ayrı ayrı/yeni satır ekledi ediliyor . (Umarım yapar sens)

cevap

0

İstenen çözelti

$str = ""; 
foreach ($xml->home->data as $info){ 
    $str .= $info['number'] . " " . $info['name']. "(".$info['color'].") "; 
} 
//insert into database using whatever method you're using. i.e. PDO. 

AlternaSaç tive soltutions

Pekala, neden hepsini bir diziye koymuyorsunuz, onu seri hale getirmiyorsunuz (ileride kullanmak için) ve sonra veritabanı güvenli hale getirmek için base64_encode? Bunu özellikle istemediğini biliyorum, ama kesinlikle daha iyi bir çözüm olurdu.

$insert = array(); 
foreach ($xml->home->data as $info){ 
    $insert[$info['number']] = $info['name']."(".$info['color'].")"; 
    $insert = base64_encode(serialize($insert)); 
} 
//insert into database using whatever method you're using. i.e. PDO. 

Ayrıca kullanabilirsiniz:

$insert[] = array("id" => $info['number'], "name" => $info['name'], "colour" = > $info['color']); 

Bu durumda, daha kolay arama yapmak için dizinin aracılığıyla interate olabilir ama bunun yerine isterseniz, kendi kimliği üzerinden belirli bir kişi erişemez,

$insert[$info['number']] = array("name" => $info['name'], "colour" = > $info['color']); 

Bu şekilde, veritabanı ve dekoder dışında tüm verileri geri çekebilir ve böyle unseralise: Bunu kullanmak

seralize(base64_decode($array)); 

ve (örneğin, ilk durumda) dizinler yoluyla No her kullanıcı erişim, $array[1] içerecektir: İkinci örnekte John(Red)

, John(Red) için $array[0] kullanımı ve üçüncü örnekte, array[1]'u tekrar kullanabilirsiniz.

+0

Bunun için teşekkürler ve yardım. Tüm veri öğelerini alıp bunları bir mysql veri tabanına eklemeden önce tek bir diziye yerleştirmenin bir yolu var mı? Örneğin, $ insert'in verileri 1.John (Kırmızı), 2. Jim (Mavi), 3. Bob (Siyah) – Jeebs

+0

olacaktır. Örnek kodum tam olarak budur. '$ Insert' değişkeninin içindeki her şeyi koyar ve veritabanına konmaya hazır olarak her şeyi kodlar. Cevabımda buna değindim, ancak sadece '$ insert' içeriğini ekleyin ve bir yere saklayın (bir veritabanı gibi) ve daha sonra 'seralize (base64_decode ($ array)) ile geri döndüğünüzde; '$ array [1]' dizgisi "John (Red)" ve '$ array [3]' dizisine erişmek için "Bob (Black)" dizgesini elde etmek için. Ayrıca, cevabı dizideki renkten de ayıracak başka bir çözümle de güncelleyeceğim. – Daniel

+0

John (Kırmızı) ve Bob (Siyah) birlikte bir dizi sahip olmak için arıyorum. Mümkün mü? Bunu denediğimde yine de her dizi için Veritabanında ayrı satırlar oluşturdu. Tüm XML verileriyle veritabanında bir satır istiyorum. – Jeebs

0

yapabilirsiniz Gördüğüm kadarıyla:
- 2 değişkenler (isim & renk) ile saklı bir yordam oluşturmak - insert
yürütmek bir SQL & yazın.

Kayıtlı yordamların kullanımını tercih ediyorum çünkü veritabanını SQL'in yorumlanması gereken zamanı zaten biliyor, çünkü ne yapması gerektiğini zaten biliyor.

aşağıdaki teknik özelliklere sahip bir tablo yaratacak

:

CREATE TABLE DATA (
id_name VARCHAR, 
color VARCHAR, 
PRIMARY KEY (id_name)) 

Sonra aramak için bir saklı yordam yazmak:

CREATE PROCEDURE storeKeys(IN var_name VARCHAR, IN var_color VARCHAR) 
BEGIN INSERT INTO data(id_name, color) VALUES(@var_name, @var_color); 

Sonra PHP döngü içinden hepsini arayıp sadece değişkenleri ayarlamak . Bir kılavuz olarak

: http://php.net/manual/en/mysqli.quickstart.stored-procedures.php

Eğer sorgu en toplu oluşturarak performansı artırabilir işlemek için çok fazla veri varsa.

Umarım bu yardımcı olur