PHP -> XML export, single line probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi :)

Ik heb een xml feed (van een affiliate) die ik met een PHP parser uitlees en omzet naar een XML bestand op mijn eigen server.

Alles werkt goed, behalve dat de nieuwe data die in de XML erbij komt op een lijn wordt geplaatst.
(zie voorbeeld onder in het xml bestand).

Weet iemand hoe ik dit kan oplossen?

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
                $xml = parse_xml($file); // hier komt de feed binnen
        $items = new SimpleXMLElement($xml);        
        
        $doc = new DOMDocument();
        $doc->load($root."/projects/lastminute/xml/".$file); // laden van de huidige XML
        $doc->version = '1.0';
        $doc->encoding = 'ISO-8859-1';
        $doc->formatOutput = true;
            
        $item_root = $doc->documentElement;
            
        if(sizeof($items) >= 1)
        {
            for($i=0;$i<sizeof($items->item);$i++)
            {       
                $item = $doc->createElement("item");
                
                foreach($items->item[$i] as $key => $value)
                {
                    $item_node = $doc->createElement($key);
                    $item_node->appendChild($doc->createTextNode($value));
                    $item->appendChild($item_node); 
                }
                                
                $item_root->appendChild($item);
                                // toevoegen aan ROOT
            }           
        }
        
        $doc->appendChild($item_root);
                // toevoegen aan XML
        
        $doc->save($root."/projects/lastminute/xml/".$file);


XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="ISO-8859-1"?>
<items>
  <item>
    <title>TEST</title>
    <description>TEST</description>
    <price>TEST</price>
  </item> 
  <item>
    <title>TEST</title>
    <description>TEST</description>
    <price>TEST</price>
  </item>
 <!-- nieuwe data -->
  <item><title>TEST</title><description>TEST</description><price>TEST</price></item></items>

[ Voor 12% gewijzigd door Verwijderd op 07-11-2011 14:00 ]


Acties:
  • 0 Henk 'm!

  • Hipska
  • Registratie: Mei 2008
  • Laatst online: 15-09 21:08
Wat is je probleem nou precies?

En probeer eens wat meer leestekens te gebruiken, ik meende eerst in een van je zinnen te lezen dat je al een eindje geen vriendin meer hebt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hipska schreef op maandag 07 november 2011 @ 13:52:
Wat is je probleem nou precies?

En probeer eens wat meer leestekens te gebruiken, ik meende eerst in een van je zinnen te lezen dat je al een eindje geen vriendin meer hebt.
lol 8)7

Ik heb het even aangepast ;)

Alles werkt goed, behalve dat de nieuwe data die in de XML erbij komt op een lijn wordt geplaatst.
(zie voorbeeld xml).

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Dit zou formatOutput moeten doen, maar die werkt volgens mij alleen als je een nieuw document schrijft.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 19-09 11:00

Ventieldopje

I'm not your pal, mate!

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

En wat moet dat doen? saveXML() is hetzelfde als save($filename), afgezien van het in een string of naar een bestand schrijven.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
CodeCaster schreef op maandag 07 november 2011 @ 14:01:
Dit zou formatOutput moeten doen, maar die werkt volgens mij alleen als je een nieuw document schrijft.
Klopt dan werkt het wel goed.
Stel dat ik de items buiten de root wegschrijf worden ze wel goed geplaatst.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(sizeof($items) >= 1)
        {
            for($i=0;$i<sizeof($items->item);$i++)
            {        
                $item = $doc->createElement("item");
                
                foreach($items->item[$i] as $key => $value)
                {
                    $item_node = $doc->createElement($key);
                    $item_node->appendChild($doc->createTextNode($value));
                    $item->appendChild($item_node);    
                }
                                
                $doc->appendChild($item);
                // toevoegen buiten de ROOT
            }            
        }


Ik ben er al tijdje mee aan het puzzelen 8)7 maar binnen de <items></items> gaat het fout.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
de XML wordt geladen van een feed, ik kan hem dus niet opslaan met savexml alleen met save omdat het als nieuw bestand opgeslagen moet worden.

Acties:
  • 0 Henk 'm!

  • Hipska
  • Registratie: Mei 2008
  • Laatst online: 15-09 21:08
Volgens mij klopt je laatste bewering niet, want hij wordt als hetzelfde bestand opgeslaan als dat er al stond.
PHP:
1
2
3
$doc->load($root."/projects/lastminute/xml/".$file);

$doc->save($root."/projects/lastminute/xml/".$file);

Lijkt mij 2x dezelfde file.

Heb je nu al getest met formatOutput?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hipska schreef op maandag 07 november 2011 @ 14:43:
Volgens mij klopt je laatste bewering niet, want hij wordt als hetzelfde bestand opgeslaan als dat er al stond.
PHP:
1
2
3
$doc->load($root."/projects/lastminute/xml/".$file);

$doc->save($root."/projects/lastminute/xml/".$file);

Lijkt mij 2x dezelfde file.

Heb je nu al getest met formatOutput?
Volgens mij kopt het zo.
Met $xml en $items haal ik de data van de externe feed op.
vervolgens met $doc->load() haal ik de bestaande XML van mijn server op.
Daarna schrijf ik de nieuwe data erin en met $doc->save sla ik het document op.

formatOutput werkt ook niet :(

Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 21-09 12:37

Zoefff

❤ 

Heb je al geneuzeld in de PHP documentatie? Want in de comments wordt een situatie uitgelegd die volgens mij gelijk is aan wat je beschrijft. Zie http://php.undmedlibrary....ocument-savexml.php#68892 .

De aangedragen oplossing is om preserveWhiteSpace op false te zetten vóórdat je het document laadt. Met formatOutput wordt de indenting vervolgens correct aangepakt.

Hetzelfde wordt ook beschreven in andere comments, bijvoorbeeld http://www.php.net/manual/en/domdocument.savexml.php#76867 of http://www.php.net/manual/en/domdocument.save.php#86445 .

Ben benieuwd of het werkt.


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zoefff schreef op maandag 07 november 2011 @ 15:09:
Heb je al geneuzeld in de PHP documentatie? Want in de comments wordt een situatie uitgelegd die volgens mij gelijk is aan wat je beschrijft. Zie http://php.undmedlibrary....ocument-savexml.php#68892 .

De aangedragen oplossing is om preserveWhiteSpace op false te zetten vóórdat je het document laadt. Met formatOutput wordt de indenting vervolgens correct aangepakt.

Hetzelfde wordt ook beschreven in andere comments, bijvoorbeeld http://www.php.net/manual/en/domdocument.savexml.php#76867 of http://www.php.net/manual/en/domdocument.save.php#86445 .

Ben benieuwd of het werkt.
Juist dat was hem!! _/-\o_

Ik heb aardig wat gelezen al maar was dit nog niet tegengekomen.

Geweldig, bedankt!

Opgelost :*)
Pagina: 1