0

当我使用普通 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);
?>    
4

3 回答 3

1

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

于 2013-04-17T06:59:12.477 回答
1

我想让你看看你的foreach循环来读取 xml:

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

正如您在此处看到的,您取消了与新 xml 完全不同的 xml 节点,因此您需要解析文档并获取所有相关数据来构建查询。一个好的方法是循环<TALLYMESSAGE>检索所有相关数据并将其存储到您将能够用于新查询的变量中。

你可以用它simplexml_load_file来做到这一点。 文档: 这里

注意您的查询也必须根据新的 xml 进行更改,您将需要一个具有正确模式的新表。

UPDATED

您仍然可以使用相同的方式来解析文件,但是您需要更改脚本,并且最终会使用更多行代码来解析整个新的 xml。如您所见,结构完全不同,手有许多子节点,无法通过使用简单的 foreach 来检索,就像您对第一个没有任何子节点的文件所做的那样。这就是为什么你真的应该使用 simplexml_load_file,更少的工作

于 2013-04-15T06:35:17.927 回答
0

你定义你的连接到 mysql$con 你还必须使用mysql_query($sql, $con);

于 2013-04-15T06:24:21.107 回答