2013-04-15 64 views
0

虽然我插入数据到数据库使用正常的XML树结构数据成功插入,但是当我试图插入数据到数据库使用不同的XML结构它不给我任何错误,但在同时字段创建的,但我不能在表中以可视化的内容,插入数据到MySQL数据库通过xml

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

以上,成功地将数据插入到mysql数据库中的XML格式

下面的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结构,是否有可能插入数据使用第二个XML结构体? –

1

我想请您看看你foreach循环读取XML :

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

正如你在这里看到的那样,你的decleare 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循环,因为你的工作XML文件thats只有一个数组,所以你可以检索数据只使用一个foreach循环,但你的另一个XML文件我认为它包含更多的数组,因此您需要根据其结构创建一个或多个foreach循环。

+0

好吧,我明白了,感谢您的兴趣。 –