Несколько дней назад I managed it to export 3 different PgSQL tables into one XML file. Теперь я хотел бы импортировать тот же файл. Я искал около 2 часов, но нашел решения для импорта XML в одну таблицу. Здесь ист структуру XMLИмпорт XML-файла в базу данных PostgreSQL
<?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.
UPDATE: Я решил эту проблему и хочу показать вам мои результаты, если кто-то га такую же или подобную проблему:
$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();
}
Я надеюсь, Thos код поможет кому-то.
База данных - это действительно одна плоская таблица со строками и столбцами. Таблицы разбивают большую базу данных на представления, которые являются подмножествами одной плоской таблицы. В вашем XML есть вложенные таблицы, которые трудно вводить в базу данных. Я бы создал единую таблицу, которая содержит Col1, Col2 и Coln, а затем вводит данные в единую таблицу, а не вводит данные в три отдельные таблицы (таблица 1, таблица 2 и таблица 3). – jdweng
Вы вставили код в обновление, но не указали, какая у вас проблема, какие ошибки вы получаете и т. Д. С быстрым взглядом я вижу ряд проблем: похоже, вы используете идентификатор стиля MySQL цитируя с помощью ', а не ANSI SQL-стиль, цитирующийся с' ''. Вы также против моего явного совета * конкатенируете значения в вашем SQL и оставляете вас широко открытыми для SQL-инъекций, если вы выполняете этот SQL *. –
Если вы все еще застряли с какой бы проблемой вы ни сталкивались с этим кодом, который вы вставляли в редактирование, отправьте новый вопрос со ссылкой на эту ссылку для контекста, подраздел кода, с которым у вас возникли проблемы, описание проблемы, точное сообщение об ошибке, которое вы получаете, и т. д.Вероятно, вы обнаружите, что сами решаете это в процессе написания проблемы. (Я не могу хорошо следовать вашему коду, похоже, много дублирования, вы можете вставить его часть дважды, может быть?) –