【发布时间】:2015-08-19 10:19:50
【问题描述】:
几天前I managed it to export 3 different PgSQL tables into one XML file。现在,我想导入相同的文件。我搜索了大约 2 个小时,但只找到了将 XML 导入一个表的解决方案。这是 XML 的结构
<?xml version="1.0" encoding="UTF-8"?>
<Table1 Col1="xxx" Col2="xxx">
<Table2 Col1="xxx">
<Table3 Col1="xxx" Col2="xxx" Coln="xxx"/>
</Table2>
<Table2 Col1="xxx"/>
<Table2 Col1="xxx">
<Table3 Col1="xxx" Col2="xxx" Coln="xxx"/>
</Table2>
</Table1>
表 1 包含表 3,表 2 包含表 3。
表是 XMLWriterElements,列是 XMLWriterAttributes。
更新:我解决了问题并想向您展示我的结果,如果有人遇到相同或相似的问题:
$reader = new XMLReader();
if ($reader->open("tk.xml")) {
while($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT &&reader->name == 'Table 1') {
$knr = $reader->getAttribute('Col1');
$kname = $reader->getAttribute('Col2');
$SQL = "";
$SQL .= "SELECT
(table1).col1 AS col1, (table1).col2 AS col1
FROM
table1
";
$SQL .= "INSERT INTO table1 (";
$SQL .= "col1, col1";
$SQL .= ") VALUES (";
$SQL .= "'".$col1."', '".$col1."'";
$SQL .= ");".PHP_EOL;
echo $SQL;
}
if ($reader->nodeType == XMLReader::ELEMENT
&&reader->name == 'Table 2') { ......}
if ($reader->nodeType == XMLReader::ELEMENT
&&reader->name == 'Table 3') { ......}
}
$reader->close();
}
我希望,这些代码对某人有所帮助。
【问题讨论】:
-
数据库实际上是一个包含行和列的平面表。表将大型数据库分解为视图,这些视图是单个平面表的子集。您的 XML 有嵌套表,很难输入数据库。我将创建一个包含 Col1、Col2 和 Coln 的表,然后将数据输入到单个表中,而不是将数据输入到三个单独的表(表 1、表 2 和表 3)中。
-
您在更新中粘贴了代码,但没有说明您遇到了什么问题、遇到的错误等。快速浏览一下,我可以看到许多问题:您似乎使用 MySQL 样式的标识符引用
, not ANSI SQL style quoting with"`。您还违反了我的明确建议,在您的 SQL 中连接值,如果您执行该 SQL,则让您为 SQL 注入敞开大门。 -
如果您仍然被粘贴在编辑中的代码所遇到的任何问题所困扰,请发布一个新问题,并附上指向该问题的链接以获取上下文,即您的代码小节遇到问题、问题描述、您收到的确切错误消息等。您可能会发现在编写问题的过程中自己解决了问题。 (我不能很好地遵循您的代码,似乎有很多重复;您是否将其中的一部分粘贴了两次?)
-
好的,抱歉,我不明白那部分,因为我对 PHP 比较陌生。我忘了保存我写问题的编辑。我修改它并稍后发布我的结果
-
好的,我重新考虑并在 OP 中编写了工作代码,也许我可以做得更好?抱歉我的问题,但我在 3 周前开始使用 PHP
标签: php sql xml postgresql xmlwriter