XML import parent & CDATA !? :-/

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis WhoCares

Dennis WhoCares

02/08/2017 08:32:37
Quote Anchor link
Dag allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
Gewijzigd op 02/08/2017 12:37:17 door Dennis WhoCares
 
PHP hulp

PHP hulp

04/02/2023 06:52:43
 
Adoptive Solution

Adoptive Solution

02/08/2017 11:52:42
Quote Anchor link
Kijk eens aan :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 />';
}


?>


En het xml bestand zonder fouten :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>
 
Dennis WhoCares

Dennis WhoCares

02/08/2017 12:11:18
Quote Anchor link
Hi Adoptive,

thanks, ik heb m'n vraag even aangepast, aangezien t onduidelijk was.
Ik bedoelde importeren naar m'n database dmv 'LOAD XML'
 
Adoptive Solution

Adoptive Solution

02/08/2017 12:22:45
Quote Anchor link
Nu je de vraag hebt aangepast, slaat mijn antwoord nergens op. Bedankt.
 
Dennis WhoCares

Dennis WhoCares

02/08/2017 12:25:43
Quote Anchor link
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 -.-
 
Adoptive Solution

Adoptive Solution

02/08/2017 13:44:21
Quote Anchor link
Import van xml in MySQL met CDATA lukt niet.

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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
LOAD DATA LOCAL INFILE
    '/path/naar/corona.xml'
INTO TABLE
    corona
CHARACTER SET 'utf8'
LINES STARTING BY '<ticket>' TERMINATED BY '</ticket>'
(@tmp)
SET
  id      = ExtractValue(@tmp, '//id'),
  title   = ExtractValue(@tmp, '//title'),
  summary = ExtractValue(@tmp, '//summary')
;
 
Dennis WhoCares

Dennis WhoCares

02/08/2017 18:16:25
Quote Anchor link
Hi Adoptive,

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.