appenchild in parent plaats alle childs in 1 horizontale regel
<script>
<code>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Load xml from file
$doc = new DOMDocument();
$doc->load('bestand.xml'); // Bestand in DOM laden
$doc->formatOutput = true;
$doc->preserveWhiteSpace = false;
//Adding data
$doc->getElementsByTagName( "skills" )->item(0)
->appendChild($doc->createElement("skill"))
->appendChild($doc->createElement("skill_description", "Dit is voorbeeld 1"));
$doc->
->appendChild($doc->createElement("skill"))
->appendChild($doc->createElement("skill_description", "Dit is voorbeeld 2"));
?>
//Load xml from file
$doc = new DOMDocument();
$doc->load('bestand.xml'); // Bestand in DOM laden
$doc->formatOutput = true;
$doc->preserveWhiteSpace = false;
//Adding data
$doc->getElementsByTagName( "skills" )->item(0)
->appendChild($doc->createElement("skill"))
->appendChild($doc->createElement("skill_description", "Dit is voorbeeld 1"));
$doc->
->appendChild($doc->createElement("skill"))
->appendChild($doc->createElement("skill_description", "Dit is voorbeeld 2"));
?>
</code>
</script>
Qua werking functioneert het script wel.
Wie o wie heeft de oplossing? Bvd.
public bool $formatOutput in de class DOMDocument met de belofte: "Nicely formats output with indentation and extra space."
Niet getest, maar ik zie een TS, ik ben bang dat je die formatOutput en preservceWhiteSpace op elke child opnieuw moet instellen...
Maar qua logica, waarom werkt het 2e voorbeeld wel?
Dan zou ie het bij voorbeel 1 toch ook niet moeten doen?
Ff voor de duidelijkheid
Voorbeeld 2 wordt zoiets als
</eindexmlroot>
<skill>
<skill_description>Dit is een test</skill_description>
</skill>
------------
Maar ja niet leuk als een child buiten de root staat.
------------
En voorbeeld 1 wordt zoiets als
<skills>
.
.
<skill><skill_description>voorbeeld</skill_description></skill><skill><skill_description>voorbeeld</skill_description></skill><skill><skill_description>voorbeeld</skill_description></skill></skills>
.
..
</eindexmlroot>
Maar dan 1 lange regel mocht het niet duidelijk overkomen hier.
Even wegdenken dan functioneert het wel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
error_reporting ( E_ALL );
$doc = new DOMDocument ( );
$doc -> formatOutput = true;
$doc -> preserveWhiteSpace = false;
$skills = $doc -> createElement ( 'skills' );
$skills -> appendChild ( $doc -> createElement ( 'skill' ) ) -> appendChild ( $doc -> createElement ( 'skill_description', 'Dit is voorbeeld 1' ) );
$skills -> appendChild ( $doc -> createElement ( 'skill' ) ) -> appendChild ( $doc -> createElement ( 'skill_description', 'Dit is voorbeeld 2' ) );
$skills -> appendChild ( $doc -> createElement ( 'skill' ) ) -> appendChild ( $doc -> createElement ( 'skill_description', 'Dit is voorbeeld 3' ) );
$doc -> appendChild ( $skills );
$doc -> save ( 'bestand.xml' );
?>
error_reporting ( E_ALL );
$doc = new DOMDocument ( );
$doc -> formatOutput = true;
$doc -> preserveWhiteSpace = false;
$skills = $doc -> createElement ( 'skills' );
$skills -> appendChild ( $doc -> createElement ( 'skill' ) ) -> appendChild ( $doc -> createElement ( 'skill_description', 'Dit is voorbeeld 1' ) );
$skills -> appendChild ( $doc -> createElement ( 'skill' ) ) -> appendChild ( $doc -> createElement ( 'skill_description', 'Dit is voorbeeld 2' ) );
$skills -> appendChild ( $doc -> createElement ( 'skill' ) ) -> appendChild ( $doc -> createElement ( 'skill_description', 'Dit is voorbeeld 3' ) );
$doc -> appendChild ( $skills );
$doc -> save ( 'bestand.xml' );
?>
Alleen echter komt deze helemaal aan het einde van de xml te staan.
Ik wou hem echter nesten in de <skills> tag.
En dat lukt me wel met die
->getElementsByTagName( "skills" )->item(0)
er tussen.
Alleen krijg ik dan die lange horizontale regel wat ik zo vreemd vind.
Hoe kan ik de toegevoegde data nesten in de juiste tags?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$xml = new \SimpleXmlElement('bestand.xml', 0, true);
$skills = $xml->skills;
$skills->addChild('skill')->addChild('skill_description', 'Dit is voorbeeld 1');
$doc = new \DomDocument();
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;
$doc->loadXML($xml->asXML());
echo $dom->saveXML();
?>
$xml = new \SimpleXmlElement('bestand.xml', 0, true);
$skills = $xml->skills;
$skills->addChild('skill')->addChild('skill_description', 'Dit is voorbeeld 1');
$doc = new \DomDocument();
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;
$doc->loadXML($xml->asXML());
echo $dom->saveXML();
?>
Offtopic:
een <skill_description> in je <skill> met alleen een value is niet zo mooi in XML. Alles wat alleen een value bevat wordt als attribuut mee gegeven en iets als een array als element. Tevens hoor je ipv _ een - in XML te gebruiken, dus <skill-description>