XML import parent & CDATA !? :-/
ik ben bezig met een nieuwe XML import.
Deze bevat echter een 'parent' en de rows veel CDATA.
Ik heb geprobeerd om de parent te stripen met 'sed' commando
en de CDATA met 'tr'
Echter krijg ik allemaal lege records >.<
Ondertussen terug gestapt naar de csv welke het systeem ook aanbied, maar toch wil ik de vraag hier stellen.
Hoe kan ik het beste een XML naar een mysql tabel importeren dat een parent heeft, of zelfs 2 parents, en de fields met CDATA (geen attributen, maar de waardes) (zo een XML heb ik ook, maar die strip ik eruit)
Bijv.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8" ?>
<coronaLS1>
<feed>
<ticket>
<id>12345</id>
<title><![CDATA[This is an example]]></title>
<summary><![CDATA{asdasdwqe qwe qasd asdasdasd]]</summary>
</ticket>
<ticket>
<id>12346</id>
<title><![CDATA[This is an example too]]></title>
<summary><![CDATA{asdasdwqe qwe qasd asdasdasd]]</summary>
</ticket>
</feed>
</coronaLS1>
<coronaLS1>
<feed>
<ticket>
<id>12345</id>
<title><![CDATA[This is an example]]></title>
<summary><![CDATA{asdasdwqe qwe qasd asdasdasd]]</summary>
</ticket>
<ticket>
<id>12346</id>
<title><![CDATA[This is an example too]]></title>
<summary><![CDATA{asdasdwqe qwe qasd asdasdasd]]</summary>
</ticket>
</feed>
</coronaLS1>
Gewijzigd op 02/08/2017 12:37:17 door Dennis WhoCares
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$dom = simplexml_load_file('corona.xml');
echo '<pre>';
print_r($dom);
echo '</pre>';
echo '<p>' . $dom->feed->ticket[0]->id . ' - ' . $dom->feed->ticket[0]->title . ' - ' . $dom->feed->ticket[0]->summary . '</p>';
echo '<p>' . $dom->feed->ticket[1]->id . ' - ' . $dom->feed->ticket[1]->title . ' - ' . $dom->feed->ticket[1]->summary . '</p>';
foreach ($dom->feed->ticket as $ticket) {
echo $ticket->title . '<b> is </b>' . $ticket->summary . '<br />';
}
?>
$dom = simplexml_load_file('corona.xml');
echo '<pre>';
print_r($dom);
echo '</pre>';
echo '<p>' . $dom->feed->ticket[0]->id . ' - ' . $dom->feed->ticket[0]->title . ' - ' . $dom->feed->ticket[0]->summary . '</p>';
echo '<p>' . $dom->feed->ticket[1]->id . ' - ' . $dom->feed->ticket[1]->title . ' - ' . $dom->feed->ticket[1]->summary . '</p>';
foreach ($dom->feed->ticket as $ticket) {
echo $ticket->title . '<b> is </b>' . $ticket->summary . '<br />';
}
?>
En het xml bestand zonder fouten :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8" ?>
<coronaLS1>
<feed>
<ticket>
<id>12345</id>
<title><![CDATA[This is an example ONE]]></title>
<summary><![CDATA[asdasdwqe qwe qasd asdasdasd]]></summary>
</ticket>
<ticket>
<id>12346</id>
<title><![CDATA[This is an example TWO]]></title>
<summary><![CDATA[asdasdwqe qwe qasd asdasdasd]]></summary>
</ticket>
</feed>
</coronaLS1>
<coronaLS1>
<feed>
<ticket>
<id>12345</id>
<title><![CDATA[This is an example ONE]]></title>
<summary><![CDATA[asdasdwqe qwe qasd asdasdasd]]></summary>
</ticket>
<ticket>
<id>12346</id>
<title><![CDATA[This is an example TWO]]></title>
<summary><![CDATA[asdasdwqe qwe qasd asdasdasd]]></summary>
</ticket>
</feed>
</coronaLS1>
thanks, ik heb m'n vraag even aangepast, aangezien t onduidelijk was.
Ik bedoelde importeren naar m'n database dmv 'LOAD XML'
Nu je de vraag hebt aangepast, slaat mijn antwoord nergens op. Bedankt.
Adoptive Solution op 02/08/2017 12:22:45:
Nu je de vraag hebt aangepast, slaat mijn antwoord nergens op. Bedankt.
Mijn excuses! Ik heb 2 woorden toegevoegd :D
Geheel mijn fout t was nog vroeg -.-
Enige manier om het wel te laten lukken is om de CDATA code eruit te halen.
Heb effe gezocht hoe het toch kan zonder xml aan te passen en kwam dit tegen :
https://stackoverflow.com/questions/13107639/problems-with-mysql-load-xml-infile
Met deze code lukt het dus.
enorm bedankt voor je reactie en de tijd voor research.
Ik zal dit morgen eens testen, ik hoop dat het werkt, dan kan ik al het moeilijke gedoe van een andere import ook aanpassen.
Bij de andere feed stuit ik op nog n ander probleem.
Elk veld, bevat de gegeven nog eens tussen <Value></Value> tags
Indien leeg <Value\>
Heb dat nog nooit eerder gezien, wel als er zegmaar nog een aparte array in zit, maar dat is niet het geval.