2015-03-15 6 views
0

Я пытаюсь вставить XML-данные в свой sql, но это не вставка. как написать Еогеасп (xml->) для этого типа xml.the XML генерируется динамически в этом structure.this образец XML в этом форматеВставить XML-данные в таблицу MySQL, используя PHP

<?php 
$xmlData =<<< END 
<?xml version="1.0"?> 
<Customer> 
<id>1</id> 
<name>Oluwafemi</name> 
<address>Cresent Drive, TX</address> 
<list> 
<contact>56689</contact> 
<telephone>5889745</telephone> 
</list> 
<offer>congrats</offer> 
</Customer> 
END; 

$xml = simplexml_load_string($xmlData) or die("ERROR: Cannot create SimpleXML object"); 
$connection = mysqli_connect("localhost", "root", "", "Customers") or die ("ERROR: Cannot connect"); 

foreach ($xml->Customer as $Customer) { 
$id = $Customer->id; 
echo "$id"; 
$name = $Customer->name; 
$address = $Customer->address; 

$sql = "INSERT INTO customerdata (id, name, address) VALUES ('$id', '$name', '$address')"; 
mysqli_query($connection, $sql) or die ("ERROR: " .mysqli_error($connection) . " (query was $sql)"); 
} 
mysqli_close($connection); 
?> 
+0

Подсказка: инструмент командной строки mysql может напрямую импортировать большинство файлов XML. См. Также [Как импортировать XML-файл в таблицу базы данных MySQL с помощью XML_LOAD(); function] (http://stackoverflow.com/q/5491056/367456) – hakre

+0

Hntt # 2: '$ xml' в вашем примере представляет документ' 'элемент уже. Эта ошибка распространена среди новых пользователей SimpleXML. В вашем случае вам просто не нужно указывать здесь, поскольку это всего лишь одна строка для клиентов. – hakre

ответ

0

Вам нужно отредактировать XML-документ, инкапсулировать документ с этим тегом:
<Customers> ... </Customers>

Так начало часть кода должна выглядеть следующим образом:

<?xml version="1.0"?> 
$sXmlString =<<< END 
<Customers> 
    <Customer> 
    <id>1</id> 
    <name>Oluwafemi</name> 
    <address>Cresent Drive, TX</address> 
    </Customer> 
</Customers> 
END; 

EDIT: OP не может редактировать предоставленный XML, я предполагаю, что он структурирован, когда новые клиенты будут добавлены с дополнительными идентификаторами, именами, адресами. Вот обновленный код для OP:

<?php 
$xmlData =<<< END 
<?xml version="1.0"?> 
<Customer> 
    <id>1</id> 
    <name>Oluwafemi</name> 
    <address>Cresent Drive, TX</address> 
    <id>2</id> 
    <name>Rob</name> 
    <address> 123 Longhorn </address> 
</Customer> 
END; 

$xml = simplexml_load_string($xmlData) or die("ERROR: Cannot create SimpleXML object"); 
$connection = mysqli_connect("localhost", "root", "", "Customers") or die ("ERROR: Cannot connect"); 

/* Assumes that the number of IDs = number of customers */ 
$size = sizeOf($xml->id); 
$i = 0; //index 

/* Add each customer to the database, See how we reference it as $xml->ENTITY[INDEX] */ 
while($i != $size) 
{ 
    //echo $xml->id[$i]; //Test 
    $sql = "INSERT INTO customerdata (id, name, address) VALUES ('$xml->id[$i]', '$xml->name[$i]', '$xml->address[$i]')"; 
    mysqli_query($connection, $sql) or die ("ERROR: " .mysqli_error($connection) . " (query was $sql)"); 

    $i++; //increment index 
} 

mysqli_close($connection); 

Я также добавил дополнительный идентификатор клиента с данными. Вы можете удалить это, и код все равно будет работать нормально.

+0

Hi RobMullins, xml генерируется динамически. любая помощь для этого xml – user3243931

+0

Вы должны действительно структурировать свой XML лучше. Поскольку вы не можете, я обновлю ответ ... –

+0

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы по этому поводу. –

0

Если у вас есть несколько клиентов ...

$sXmlString =<<< END 
<?xml version="1.0"?> 
<Content> 
<Customer> 
<id>1</id> 
<name>Oluwafemi</name> 
<address>Cresent Drive, TX</address> 
</Customer> 
<Customer> 
<id>2</id> 
<name>Oluwafemi2</name> 
<address>Cresent Drive 2, TX</address> 
</Customer> 
</Content> 
END; 

$oXml  = simplexml_load_string($sXmlString); 
$sJson  = json_encode($oXml); 
$aContent = json_decode($sJson, TRUE); 
$aCustomers = $aContent[ 'Customer' ]; 
var_dump($aCustomers); 
$iCountCustomers = count($aCustomers); 
for($i = 0; $i < $iCountCustomers; ++$i) 
{ 
    $sId  = $aCustomers[ $i ][ 'id' ]; 
    $sName = $aCustomers[ $i ][ 'name' ]; 
    $sAddress = $aCustomers[ $i ][ 'address' ]; 
    var_dump($sId); 
    var_dump($sName); 
    var_dump($sAddress); 
}