Ayrıştırma veriler (PHP, MySQL)

5 Cevap php

Ben aşağıdaki biçimde veri ile bir dosya var:

<user>
    <fname>Anthony</fname>
    <lname>Smith</lname>
    <accid>3874918</accid>
</user>

<user>
     ...
</user>

Ben bu verileri ayrıştırmak ve follwing alanları ile MySQL veritabanı depolamak çalışıyorum: fname, lname, accid.

Şimdi sorun <user> ve </user> belirlemek için nasıl yani ben bunun içindeki verileri ayrıştırmak? Teşekkür ederim.

5 Cevap

Geçerli XML ise, kullanmak SimpleXML. Öncelikle size tek bir kök öğesi olduğundan emin olmak gerekir, örneğin, <users>:

<?php
$str = "<users>
            <user>...</user>
            <user>...</user>
        </users>";

$xml = simplexml_load_string($str>;
foreach ($xml as $user) {
    // Make a query using $user->fname, $user->lname, $user->accid
}

Bir xml dosyası ise, ben bunun yerine düzenli ifadeler ve / veya string fonksiyonları ile oynama (this?) Bir XML çözümleyici kullanarak öneririm.

Sen (veri bağlı olarak, ya da xml ayrıştırıcı) bir dom ayrıştırıcı kullanarak bu çevrilevilebilecekleri gerekir. (: Denenmemiş kodu warning) Bu gibi bir şey olacaktır:

$dom = new DOMDocument();
$dom->loadXML($xmlString); 
$list = $dom->getElementsByTagName('user');
for ($i = 0; $i < $list->length; $i++) {
    $userNode = $list->item($i);
    $node = $userNode->firstChild();
    while ($node !== NULL) {
        switch ($node->$nodeName) {
            case 'fname':
                // ...
        }
        $node = $node->nextSibling();
    }
}

Çok az kod ile, bir SimpleXML nesnesi oluşturmak ve bunu yapmak için ve PDO kullanabilirsiniz (sen olmalısın) php5 kullanıyorsunuz varsayarsak. Mysql_ fonksiyonları kullanarak ve elle XML ayrıştırma çok fazla kod alacaktı.

İşte bir örnek:

$names = simplexml_load_file('names.xml');

foreach ($names->user as $user) { 

$pdo->exec("INSERT INTO names (fname, lname, accid)" . " VALUES ('" . $user->fname . " ', '" . $user->lname . "','" . $user->accid . "')")
or die("failed insert");

}

Bu kodu test, ama size nasıl çalıştığını iyi bir fikir verir değildir. Bir üretim uygulaması için ben biraz daha fazla hata denetimi ve doğrulama koymak isterim, ama bu size başlamış.

Eğer PHP5.x kullanıyorsanız, SimpleXML size yardımcı olacaktır.

<?php
$sample = <<<END                                                                                                             
<foo>
 <user>
    <fname>Anthony</fname>
    <lname>Smith</lname>
    <accid>3874918</accid>
  </user>
  <user>
    <fname>foo</fname>
    <lname>bar</lname>
    <accid>123</accid>
  </user>
</foo>
END;

$xml = simplexml_load_string($sample);
var_dump($xml);