MySQL ma ładny oświadczenie: LOAD XML LOCAL plik_weLOAD XML LOCAL INFILE z Niespójne nazwy kolumn
Na przykład, jeśli masz poniższej tabeli:
CREATE TABLE person (
person_id INT NOT NULL PRIMARY KEY,
fname VARCHAR(40) NULL,
lname VARCHAR(40) NULL
);
i następujący plik XML o nazwie person.xml :
<list>
<person>
<person_id>1</person_id>
<fname>Mikael</fname>
<lname>Ronström</lname>
</person>
<person>
<person_id>2</person_id>
<fname>Lars</fname>
<lname>Thalmann</lname>
</person>
</list>
można to zrobić:
LOAD XML LOCAL INFILE 'person.xml'
INTO TABLE person
ROWS IDENTIFIED BY '<person>';
Moje pytanie brzmi: co by było, gdyby nazwy kolumn były inne w pliku XML niż w tabeli? Na przykład:
<list>
<person>
<PersonId>1</PersonId>
<FirstName>Mikael</FirstName>
<LastName>Ronström</LastName>
</person>
<person>
<PersonId>2</PersonId>
<FirstName>Lars</FirstName>
<LastName>Thalmann</LastName>
</person>
</list>
Jak można osiągnąć to samo za pomocą instrukcji MySQL bez manipulowania plikiem XML? Szukałem wszędzie, ale nie mogłem znaleźć odpowiedzi.
To jest bardzo dobry obejść. Jednak, gdy skomentowałem odpowiedź Billa Karwina, istnieje inny problem z instrukcją LOAD XML. Nie akceptuje zminimalizowanych pustych tagów, takich jak . Czy możesz wymyślić rozwiązanie tego problemu? –
stepanian
Nigdy nie pracowałem z 'LOAD XML', więc poszedłem z wykształconym domysłem na temat tej odpowiedzi. Więc nie, niestety nie znam rozwiązania tego problemu, innego niż ładowanie pliku XML w innym języku (np. PHP), parseowanie go, a następnie wysyłanie wynikowego zapytania do bazy danych. –
FYI Niepowodzenie ładowania tagów było błędem i został naprawiony od _Prior do MySQL 5.5.46, LOAD XML nie obsługiwał pustych elementów XML w postaci poprawnie. (Bug # 67542, Bug # 16171518) _. Od [tutaj] (https://dev.mysql.com/doc/refman/5.5/en/load-xml.html) –
radman