通过xml将数据插入mysql数据库

时间:2013-04-15 06:15:42

标签: php mysql xml phpmyadmin

当我使用普通的xml树结构数据插入数据库时​​,成功插入数据,但是当我尝试使用不同的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);
?>    

3 个答案:

答案 0 :(得分: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,减少工作量

答案 1 :(得分:1)

你需要更多地思考你的foreach循环,因为在你工作的xml文件中只有一个数组,所以你只能使用一个foreach循环检索数据,但你的另一个xml文件我认为它包含更多的数组,所以你需要创建一个或多个foreach循环根据其结构。

答案 2 :(得分:0)

$con中定义与mysql的连接 您还必须使用mysql_query($sql, $con);