Gå til innhold

DOMDocument og formatOutput - virker ikke helt?


Anbefalte innlegg

Hei

 

Jeg har en liten øvingsoppgave på skolen, hvor vi skal lese en xmlfil inn i php som et DOMDocument-objekt. Deretter skal vi skrive til det samme objektet og echo/printe ut xml-koden. Det jeg har problemer med er at jeg har satt "formatOutput" som true (en public variabel i DOMDocument) men den skriver allikevel ut koden jeg har lagt til på èn linje. Kan noen se på det og se om de finner ut av det?

 

Her er XML-Filen:

 

(jeg har kalt den workwith.xml)

 

<?xml version="1.0" encoding="UTF-8"?>

 

<users>

 

<user>

 

<name>Ola Nordmann</name>

 

<email>[email protected]</email>

 

<age>33</age>

 

</user>

 

<user>

<name>Kari Nordmann</name>

<email>[email protected]</email>

<age>34</age>

</user>

 

</users>

 

-------------

 

Og her er min php-kode:

 

<?php

 

$doc = new DOMDocument();

$doc->load('workwith.xml');

$doc->formatOutput=true;

 

$users = $doc->getElementsByTagName("user");

 

echo "UTSKRIFT AV DET SOM ER HENTET INN FRA FIL: <br/>";

 

foreach ($users as $user) {

$name = $user->getElementsByTagName("name")->item(0)->nodeValue;

 

$email = $user->getElementsByTagName("email")->item(0)->nodeValue;

 

$age = $user->getElementsByTagName("age")->item(0)->nodeValue;

 

echo $name . "<br/>" . $email . "<br/>" . $age;

}

 

echo "<br/>";

 

//lager en array som da inneholder en ny user. Skal prøve å gjøre dette som et objekt senere kanskje?

$nyebrukere = array(

'name' => 'Herr Potet',

'email' => '[email protected]',

'age' => '25'

);

 

//legger det inn i $doc som er et DOMDocument-objekt

 

//først larer vi rotelementet i en variabel

$usersRoot = $doc->getElementsByTagName("users")->item(0);

//så lager vi et "user"-element i DOM

$u = $doc->createElement("user");

 

$uname = $doc->createElement("name");

$uname->appendChild(

$doc->createTextNode( $nyebrukere['name'] )

);

$u->appendChild($uname);

 

$umail = $doc->createElement("email");

$umail->appendChild(

$doc->createTextNode($nyebrukere['email'])

);

$u->appendChild($umail);

 

 

$usersRoot->appendChild($u);

 

echo "XML: <br/>";

 

echo $doc->saveXML();

 

?>

 

------------

 

Jeg kjører MAMPserver 1.7.1 med PHP5, har ikke gjort noen konfigurasjonsendringer.

 

På forhånd takk for svar eller forsøk!

 

Bare legger til den outputten jeg får:

 

UTSKRIFT AV DET SOM ER HENTET INN FRA FIL: <br/>Ola Nordmann<br/>[email protected]<br/>33Kari Nordmann<br/>[email protected]<br/>34<br/>XML: <br/><?xml version="1.0" encoding="UTF-8"?>

<users>

 

<user>

 

<name>Ola Nordmann</name>

 

<email>[email protected]</email>

 

<age>33</age>

 

</user>

 

<user>

<name>Kari Nordmann</name>

<email>[email protected]</email>

 

<age>34</age>

</user>

 

<user><name>Herr Potet</name><email>[email protected]</email></user></users>

Lenke til kommentar
Videoannonse
Annonse
Det jeg har problemer med er at jeg har satt "formatOutput" som true (en public variabel i DOMDocument) men den skriver allikevel ut koden jeg har lagt til på èn linje.

 

*snip*

 

<users>

...

<user><name>Herr Potet</name><email>[email protected]</email></user></users>

ser ikke problemet

 

PHP.net

 

formatOutput

 

Nicely formats output with indentation and extra space.

 

Ville jo da tro at outputten ikke kom på èn linje samlet, men i den stilen som det jeg hentet inn kom i. Mulig du har sett litt feil, det er den nederste linjen "Herr Potet" jeg har hentet inn til DOMDocument-objektet. Den outputtes på èn linje.

 

EDIT: Var herr potet ikke potethode.

Endret av pan100
Lenke til kommentar
Ville jo da tro at outputten ikke kom på èn linje samlet, men i den stilen som det jeg hentet inn kom i. Mulig du har sett litt feil, det er den nederste linjen "Herr Potet" jeg har hentet inn til DOMDocument-objektet. Den outputtes på èn linje.

Ahh, vel ...

En bra XML utskrift har ikke unødvendig whitespace imnsho. XML skal skrives og leses av programmer.

 

kanskje dette vil funke...

$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->load('workwith.xml');

$doc->formatOutput=true;
echo $doc->saveXML();

Endret av OISNOT
Lenke til kommentar
Ville jo da tro at outputten ikke kom på èn linje samlet, men i den stilen som det jeg hentet inn kom i. Mulig du har sett litt feil, det er den nederste linjen "Herr Potet" jeg har hentet inn til DOMDocument-objektet. Den outputtes på èn linje.

Ahh, vel ...

En bra XML utskrift har ikke unødvendig whitespace imnsho. XML skal skrives og leses av programmer.

 

kanskje dette vil funke...

$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->load('workwith.xml');

$doc->formatOutput=true;
echo $doc->saveXML();

 

 

Jaaa, det funker! Sikkert det at den innhentede filen inneholdt en del whitespace og sånn. Takker

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...