0

通常のxmlツリー構造を使用してデータベースにデータを挿入している間、データは正常に挿入されますが、別の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);
?>    
4

3 に答える 3

1

foreach ループについてもっと考える必要があります。作業中の xml ファイルでは配列が 1 つしかないため、foreach ループを 1 つだけ使用してデータを取得できますが、別の xml ファイルにはより多くの配列が含まれていると思われるため、1 つ以上を作成する必要があります。その構造に従って foreach ループ。

于 2013-04-17T06:59:12.477 に答える
1

ループを見てforeachxml を読んでほしい:

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 に答える