Bekijk Volledige Versie : [PHP] Samenvoegen xml bestanden
Jelle de Jong
02/03/04, 19:45
Hallo,
Ik kan het maar niet vinden op internet en de PHP docs worden me ook
niet veel duidelijker. Vandaar deze vraag.
Hoe kan ik twee (of meer) xml bestanden samenvoegen zodat ik het geheel
door de volgende functie heen kan halen:
function parseXsl($xml,$xsl) {
if(@$xmldoc = domxml_open_mem($xml)) {
if(@$xsldoc = domxml_xslt_stylesheet_file($xsl)) {
$result = $xsldoc->process($xmldoc,$_GET);
// toon resultaat
echo $xsldoc->result_dump_mem($result);
} else {
// xsl error
echo "Error";
}
} else {
// xml error
echo "Error";
}
}
Ik heb bijvoorbeeld 2 xml bestanden, /xml/voorbeeld1.xml en
/xml/voorbeeld2.xml. Deze zijn geldige xml, dus met het volgende bovenin
het bestand: <?xml version="1.0" encoding="iso-8859-1"?>.
Hopelijk kunnen jullie me helpen...
Alvast bedankt!
Groeten,
Jelle
Daniel Tryba
02/03/04, 21:05
Jelle de Jong <me@nospam.hoest.nl> wrote:
> Hoe kan ik twee (of meer) xml bestanden samenvoegen zodat ik het geheel
> door de volgende functie heen kan halen:
.....
> Ik heb bijvoorbeeld 2 xml bestanden, /xml/voorbeeld1.xml en
> /xml/voorbeeld2.xml. Deze zijn geldige xml, dus met het volgende bovenin
> het bestand: <?xml version="1.0" encoding="iso-8859-1"?>.
Q&D:
-lees beide files in met bv file ($x1 en $x2)
-$x3="<?xml version='1.0' charset='iso-8859-1'?><root>";
-2 for loops die het 2de t/m de laatste regel aan $x3 plakken voor $x1
en $x2
-$x3.='</root>';
Tadaa: valide xml.
--
Daniel Tryba
Jelle de Jong
02/03/04, 21:25
Daniel Tryba wrote:
> Q&D:
> -lees beide files in met bv file ($x1 en $x2)
> -$x3="<?xml version='1.0' charset='iso-8859-1'?><root>";
> -2 for loops die het 2de t/m de laatste regel aan $x3 plakken voor $x1
> en $x2
> -$x3.='</root>';
>
> Tadaa: valide xml.
Thanks, maar ik had inmiddels al een andere oplossing bedacht... had het
constant over het hoofd gezien, namelijk: DomNode->clone_node(true);
Check:
/**
* $sourcefile : de in te voegen xml; bestandsnaam
* $destination : een DomDocument waarin de xml moet
*/
function includeXml($sourcefile,$destination) {
if(@$include = domxml_open_file($sourcefile)) {
$incroot = $include->document_element();
$root = $destination->document_element();
$child = $root->append_child($incroot->clone_node(true));
} else {
echo "Error.";
}
return $destination;
}
Werkt ook super eigenlijk!
Jelle de Jong <me@nospam.hoest.nl>:
> Thanks, maar ik had inmiddels al een andere oplossing bedacht... had het
> constant over het hoofd gezien, namelijk: DomNode->clone_node(true);
>
> Check:
> /**
> * $sourcefile : de in te voegen xml; bestandsnaam
> * $destination : een DomDocument waarin de xml moet
> */
> function includeXml($sourcefile,$destination) {
> if(@$include = domxml_open_file($sourcefile)) {
> $incroot = $include->document_element();
> $root = $destination->document_element();
> $child = $root->append_child($incroot->clone_node(true));
> } else {
> echo "Error.";
> }
> return $destination;
> }
Nu ben ik geen PHP liefhebber, maar gaat dat wel goed?
-xml 1-
<root>
<test1/>
</root>
-xml 2-
<root>
<test2/>
</root>
Dan wordt, als ik bovenstaande code goed begrijp, het resultaat:
<root>
<test1/>
<root>
<test2/>
</root>
</root>
Syntactisch klopt dat dan niet meer.
--
robert
Jelle de Jong
02/03/04, 23:35
robert wrote:
> Dan wordt, als ik bovenstaande code goed begrijp, het resultaat:
> <root>
> <test1/>
> <root>
> <test2/>
> </root>
> </root>
>
> Syntactisch klopt dat dan niet meer.
>
wat is er mis dan? het is toch geldige xml...
Jelle de Jong <me@nospam.hoest.nl>:
> robert wrote:
>> Dan wordt, als ik bovenstaande code goed begrijp, het resultaat:
>> <root>
>> <test1/>
>> <root>
>> <test2/>
>> </root>
>> </root>
>>
>> Syntactisch klopt dat dan niet meer.
>
> wat is er mis dan? het is toch geldige xml...
Ik bedoelde eigenlijk ook semantisch, syntactisch is het inderdaad geldig
(tenzij je een DTD of Schema gebruikt).
--
robert