2013-04-15 2 views
0

, в то время как я вставляю данные в базу данных, используя обычные данные древовидной структуры XML, успешно вставлен, но пока я пытаюсь вставить данные в базу данных с использованием другой структуры xml, это не дает мне никакой ошибки, но на же время поля создаются, но я не могу представить себе содержание в таблице к,Вставка данных в базу данных mysql через xml

<?xml version="1.0"?> 
<xml> 
<draw> 
<candelete>yes</candelete> 
<forpayroll>no</forpayroll> 
<name>hello</name> 
</draw> 
</xml> 

выше формате XML, который успешно вставить данные в базу данных MySQL

ниже формат XML не позволяет мне вставить данные в базу данных MySQL

<ENVELOPE> 
<HEADER> 
<VERSION>1</VERSION> 
<STATUS>1</STATUS> 
</HEADER> 
<BODY> 
<DESC> 
</DESC> 
<DATA> 
<TALLYMESSAGE> 
<LEDGER NAME="Dena" RESERVEDNAME="" ID="2240" REQNAME="dena"> 
<PARENT TYPE="String">Bank Accounts</PARENT> 
<TAXTYPE TYPE="String">Others</TAXTYPE> 
<ISBILLWISEON TYPE="Logical">No</ISBILLWISEON> 
<ISCOSTCENTRESON TYPE="Logical">No</ISCOSTCENTRESON> 
<ISREVENUE TYPE="Logical">No</ISREVENUE> 
<ISDEEMEDPOSITIVE TYPE="Logical">Yes</ISDEEMEDPOSITIVE> 
<CANDELETE TYPE="Logical">Yes</CANDELETE> 
<FORPAYROLL TYPE="Logical">No</FORPAYROLL> 
<MASTERID TYPE="Number"> 2240</MASTERID> 
<TNETBALANCE TYPE="Amount">0.00</TNETBALANCE> 
<LANGUAGENAME.LIST> 
<NAME.LIST TYPE="String"> 
<NAME>Dena</NAME> 
</NAME.LIST> 
<LANGUAGEID TYPE="Number">0</LANGUAGEID> 
</LANGUAGENAME.LIST> 
</LEDGER> 
</TALLYMESSAGE> 
</DATA> 
</BODY> 
</ENVELOPE> 

ниже мой PHP вставить код подключения

<?php 

$con = mysql_connect("localhost:3306","root",""); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("temp", $con); 


if(!$xml=simplexml_load_file('./xml/data.xml')){ 
trigger_error('Error reading XML file',E_USER_ERROR); 
} 



foreach ($xml as $syn) 
{ 
$candelete = $syn->candelete; 
$forpayroll = $syn->forpayroll; 
$name = $syn->name; 

$sql = "INSERT INTO vtiger (candelete, forpayroll, name) VALUES ('$candelete','$forpayroll','$name')"; 
$query = mysql_query($sql); 

if (!$query) 
{ 
    echo ('Error: ' . mysql_error()); 
} 
else 
{ 
    echo "Record added"; 
} 
} 
mysql_close($con); 
?>  
+0

, пожалуйста, добавьте код вашей функции импорта, мы не сможем помочь вам без кода – Fabio

+0

У меня есть ссылка на мой код подключения к базе данных выше, только что отредактированный. (я хочу включить 2 3 конкретных поля, только так взяли эти поля только в связи) –

ответ

0

вы определяете для MySQL СВЯЗЬ в $con вы также должны использовать mysql_query($sql, $con);

+0

в очень первых данных формата XML вставлен, поэтому проблема не в том, что проблема связана с XML-структурой, можно ли вставлять данные с помощью 2-го xml состав? –

1

Я хотел бы вам взглянуть на ваш foreach цикл для чтения XML :

foreach ($xml as $syn) 
{ 
    $candelete = $syn->candelete; 
    $forpayroll = $syn->forpayroll; 
    $name = $syn->name; 

Как вы видите здесь, вы уменьшаете узлы xml, которые совершенно разные в новом xml, поэтому вам нужно проанализировать свой документ и получить все соответствующие данные для построения запроса. Хорошим соглашением было бы зациклиться между <TALLYMESSAGE>, чтобы получить все соответствующие данные и сохранить в переменные, которые вы сможете использовать для нового запроса.

Для этого вы можете использовать simplexml_load_file. Документация:here

ПРИМЕЧАНИЕ Вы запрос также должен быть изменен в соответствии с новым XML, вы будете нуждаться в новую таблицу с правильной схемой.

UPDATED

Вы можете использовать один и тот же путь для разбора файла, но вы должны изменить свой сценарий, и вы будете в конечном итоге с большим количеством строк кода, чтобы разобрать весь новый XML. Поскольку вы можете видеть, что структура совершенно другая рука имеет много дочерних узлов, которые невозможно получить, используя простой foreach, как и для первого файла, у которого не было дочерних узлов. Вот почему вы действительно должны использовать simplexml_load_file, меньше работы

+0

Я получаю то, что вы говорите, а также задумываясь о том, чтобы делать то же самое, но публиковал вопрос, что если я могу делать то, что хочу делать напрямую, не делая все это, поэтому задал вопрос, все еще спасибо за ваше предложение. –

+0

да, вы можете, но вам совершенно необходимо изменить свой скрипт, и в итоге вы получите больше строк кода для анализа всего нового xml.Поскольку вы можете видеть, что структура совершенно другая рука имеет много дочерних узлов, которые невозможно получить, используя простой foreach, как и для первого файла. Вот почему вы действительно должны использовать simplexml_load_file, меньше работы – Fabio

+0

да, я получил его, спасибо fabio. –

1

Вам нужно больше думать о вашем цикле foreach, bcause в вашем рабочем XML-файле, который содержит только один массив, чтобы вы могли извлекать данные, используя только один цикл foreach, но ваш другой XML-файл Я думаю, что он содержит больше массива, поэтому вам нужно создать один или несколько циклов foreach в соответствии со своей структурой.

+0

Хорошо, я понял, спасибо за интерес. –