xml her-bouwen
Ik zit met een klein probleem. Ik heb namelijk een set xml files waar ik mee moet werken. Xml file type 1 is perfect, maar type 2 niet. *
Nu wil ik dus, in plaats van alles op 1 regel, ervoor zorgen dat het er uit komt te zien als type 1. Ik heb echter geen idee hoe ik dit moet doen. Ik dacht aan regex, maar dat is over de top. Toen dacht ik om over alle elementen heen te loopen, en zo dan een nieuwe lijst samen te stellen. Dit liep niet zoals ik wou **.
Is er iemand met een idee, hoe ik dit kan oplossen? Alvast bedankt :)
*
type 1:
<tag>
<tag>value</tag>
</tag>
type 2:
<tag><tag>value</tag></tag>
**
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class xmlTestje
{
public function test($xmlFile)
{
try
{
$sxi = new SimpleXMLIterator($xmlFile, NULL, true);
}
catch(Exception $e)
{
echo $e->getMessage();
}
foreach ( $sxi as $node=>$value )
{
if($value->hasChildren())
{
//En hier gaat het mis. Ik krijg hier false terug,
//terwijl er wel children aanwezig zijn. Als ik B.v. doe:
//$value->children(); Dan krijg ik netjes alle children terug...
echo $node." :<br />";
$this->test($value);
}
else
{
echo "$node : $value<br />";
}
}
}
}
[/code]
class xmlTestje
{
public function test($xmlFile)
{
try
{
$sxi = new SimpleXMLIterator($xmlFile, NULL, true);
}
catch(Exception $e)
{
echo $e->getMessage();
}
foreach ( $sxi as $node=>$value )
{
if($value->hasChildren())
{
//En hier gaat het mis. Ik krijg hier false terug,
//terwijl er wel children aanwezig zijn. Als ik B.v. doe:
//$value->children(); Dan krijg ik netjes alle children terug...
echo $node." :<br />";
$this->test($value);
}
else
{
echo "$node : $value<br />";
}
}
}
}
[/code]
Gewijzigd op 03/07/2010 21:06:36 door Wesley Overdijk
Al geprobeerd, wat dus niet echt werkt *zoals je link :P*
Edit:
Kut ubb parser:
http://php.net/class.domdocument#domdocument.props.formatoutput
Edit2:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
$string1 = <<<EOD
<?xml version="1.0" encoding="iso-8859-1" ?>
<painting>
<img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/>
<caption>This is Raphael's "Foligno" Madonna, painted in
<date>1511</date>–<date>1512</date>.
</caption>
</painting>
EOD;
$string2 = <<<EOD
<?xml version="1.0" encoding="iso-8859-1" ?><painting><img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/><caption>This isa Raphael's "Foligno" Madonna, paainted hier nog extra tekst dat het echt opvalt in<date>1511</date>–<date>1512</date>.</caption></painting>
EOD;
$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->formatOutput = true;
$doc->loadXML($string1);
var_dump($doc->saveXML());
$doc->loadXML($string2);
var_dump($doc->saveXML());
/* Levert:
string(241) "<?xml version="1.0" encoding="iso-8859-1"?>
<painting>
<img src="madonna.jpg" alt="Foligno Madonna, by Raphael"/>
<caption>This is Raphael's "Foligno" Madonna, painted in
<date>1511</date>–<date>1512</date>.
</caption>
</painting>
"
string(276) "<?xml version="1.0" encoding="iso-8859-1"?>
<painting>
<img src="madonna.jpg" alt="Foligno Madonna, by Raphael"/>
<caption>This isa Raphael's "Foligno" Madonna, paainted hier nog extra tekst dat het echt opvalt in<date>1511</date>–<date>1512</date>.</caption>
</painting>
"
*/
?>
$string1 = <<<EOD
<?xml version="1.0" encoding="iso-8859-1" ?>
<painting>
<img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/>
<caption>This is Raphael's "Foligno" Madonna, painted in
<date>1511</date>–<date>1512</date>.
</caption>
</painting>
EOD;
$string2 = <<<EOD
<?xml version="1.0" encoding="iso-8859-1" ?><painting><img src="madonna.jpg" alt='Foligno Madonna, by Raphael'/><caption>This isa Raphael's "Foligno" Madonna, paainted hier nog extra tekst dat het echt opvalt in<date>1511</date>–<date>1512</date>.</caption></painting>
EOD;
$doc = new DOMDocument('1.0', 'iso-8859-1');
$doc->formatOutput = true;
$doc->loadXML($string1);
var_dump($doc->saveXML());
$doc->loadXML($string2);
var_dump($doc->saveXML());
/* Levert:
string(241) "<?xml version="1.0" encoding="iso-8859-1"?>
<painting>
<img src="madonna.jpg" alt="Foligno Madonna, by Raphael"/>
<caption>This is Raphael's "Foligno" Madonna, painted in
<date>1511</date>–<date>1512</date>.
</caption>
</painting>
"
string(276) "<?xml version="1.0" encoding="iso-8859-1"?>
<painting>
<img src="madonna.jpg" alt="Foligno Madonna, by Raphael"/>
<caption>This isa Raphael's "Foligno" Madonna, paainted hier nog extra tekst dat het echt opvalt in<date>1511</date>–<date>1512</date>.</caption>
</painting>
"
*/
?>
Zo wil je het toch?
dus:
<Verzendingen><Verzending><KlantA><fische_12345><a_12345>Voornaam</a_12345><b_12345>Totaal binnengehaald</b_12345><c_12345>Netto inkomen</c_12345></fische_12345></klantA></Verzending></Verzendingen>
Moet worden:
<Verzendingen>
<Verzending>
<KlantA>
<fische_12345>
<a_12345>Voornaam</a_12345>
<b_12345>Totaal binnengehaald</b_12345>
<c_12345>Netto inkomen</c_12345>
</fische_12345>
</klantA>
</Verzending>
</Verzendingen>
Er zit geen vaste opmaak in, en het moet exact op deze manier. *Lang leven koppige software bedrijven*
EDIT:
OMG dit doet wel precies wat ik nodig had. sorry, jou voorbeeld zag er nogal vreemd uit... Maar ja, enorm bedankt!
Gewijzigd op 04/07/2010 00:19:59 door wesley Overdijk
Wesley Overdijk op 04/07/2010 00:00:18:
EDIT:
OMG dit doet wel precies wat ik nodig had. sorry, jou voorbeeld zag er nogal vreemd uit... Maar ja, enorm bedankt!
OMG dit doet wel precies wat ik nodig had. sorry, jou voorbeeld zag er nogal vreemd uit... Maar ja, enorm bedankt!
Inderdaad zag het er wat raar uit, mooi dat het nu gelukt is.
Waarom wil je dat? Toch niet om het later te gaan parsen he? Daar kan je dan namelijk veel beter DOM of SimpleXML voor gebruiken namelijk...
Niek s op 07/07/2010 09:52:30:
Waarom wil je dat? Toch niet om het later te gaan parsen he? Daar kan je dan namelijk veel beter DOM of SimpleXML voor gebruiken namelijk...
Maar als iets helemaal brak is gescript dat het dus wel deze formatting vereist, ga jij het dan omschrijven?