Mit PHP in XML schreiben

Chilblue

Grünschnabel
Hallo zusammen,

ich würde gern über PHP die Inhalte aus meinen Eingabeformular in einer XML-Datei speichern.
Ich finde nirgends brauchbare Informationen darüber. Erwarte ich unmögliches? Es muss doch ne einfache möglichkeit geben, um das umzusetzen?:confused:

PHP:
<?php
	if (isset($_POST["thema"])){		
			$dom = new DomDocument();
										
			$str = new domElement();
			$str = $dom->appendChild($str);
			$nummer = $dom->createElement('nr');
			$nummer = $str->appendChild($nummer);
			$ding = $dom->createElement('titel');
							
			$dom->$nummer->createTextNode('tada');
						
			if($dom) {
			    $dom->save('1.0');
			}
			else {
			    exit ("Fehler beim Parsen");
			}
	}
?>

Code:
<?xml version="1.0"?>
<bla><nr>HIER der TEXT hin!<nr/></bla>

was er mir bis jetzt ausgibt
Code:
<?xml version="1.0"?>
<bla><nr/></bla>
Das kann doch nicht so schwer sein? :confused:oder bin ich einfach zu blöd?
 
Hallo,

versuch es mal so:
PHP:
$titel = 'HIER der TEXT hin!';

$dom = new DomDocument();

// Wurzelelement:
$rootElement = $dom->createElement('bla');
$dom->appendChild($rootElement);

// erstes Kindelement mit Inhalt:
$nummer = $dom->createElement('nr',$titel);
$rootElement->appendChild($nummer);

// Angucken:
header('Content-type: text/xml');
echo $dom->saveXML();
 
sehr gut, das klappt schon mal :)

Kannst du mir noch ma den Code näher erklären?
PHP:
$rootElement = $dom->createElement('bla');
$dom->appendChild($rootElement);
Der Ablauf ist mir noch nich ganz klar
 
Jedes "wohlgeformte" XML-Dokument hat ein (und nur ein) Wurzelelement (oder auch Wurzelknoten). Bei dir heißt der Wurzelknoten "bla" und den erzeugst du am besten unmittelbar nach der Instanzierung und hängst ihn dort ein. Danach kannst du beliebig viele XML-Knoten in den Wurzelknoten einhängen. Bei dir ist das aber nur der "nr"-Knoten, der einen Textknoten als Kind hat.

Den Inhalt des Textknotens kannst du entweder gleich bei der Erzeugung des "nr"-Knotens mitgeben (wie oben gezeigt) oder aber den Textknoten später noch in den "nr"-Knoten einfügen:
PHP:
$titel = 'HIER der TEXT hin!';

$dom = new DomDocument();

// Wurzelelement:
$rootElement = $dom->createElement('bla');
$dom->appendChild($rootElement);

// erstes Kindelement ohne Inhalt:
$nummer = $dom->createElement('nr');
$rootElement->appendChild($nummer);

// Textknoten erzeugen und in nummer-Knoten einhängen:
$titelText = $dom->createTextNode($titel);
$nummer->appendChild($titelText);

// Angucken:
header('Content-type: text/xml');
echo $dom->saveXML();
 
Zuletzt bearbeitet:
okay sehr cool danke :)

könntest du mir noch beantworten, welcher Code einen Text im nachhinein noch einfügt?
also z.b. im tag <nr> soll eine nummer noch eingefügt werden
 
Gehen wir aus, dass wir die XML erstellt haben, wie du das super erklärt hast.
sie liegt also in meinen ordner drin

jetzt würde ich sie gerne laden un bearbeiten
wie ich sie lade usw. ist mir alles klar, allerdings fehlt mir wieder der code um den inhalt abzuändern.

Code:
<projekt>
  <nr>3</nr>
  <thema>3</thema>
  <name>3</name>
  <cd>3</cd>
 <video>3</video>
 <hinweis>3</hinweis>
</projekt>
<projekt>
  <nr>4</nr>
  <thema>4</thema>
  <name>4</name>
  <cd>4</cd>
 <video>4</video>
 <hinweis>4</hinweis>
</projekt>

Jetzt möchte ich den Inhalt vom ersten tag ändern.
ich hätte jetzt den code benutzt
PHP:
$zwischen0 = $dom->getElementsByTagName('nr');
$nr = $zwischen0->item(0)->nodeValue;

DAs klappt natürlich nicht^^
 
... Jetzt möchte ich den Inhalt vom ersten tag ändern.
ich hätte jetzt den code benutzt
PHP:
$zwischen0 = $dom->getElementsByTagName('nr');
$nr = $zwischen0->item(0)->nodeValue;
DAs klappt natürlich nicht^^
Komisch, bei mir funktioniert das:
PHP:
<?php

$projekte = <<<EOT
<projekte>
  <projekt>
    <nr>3</nr>
    <thema>3</thema>
    <name>3</name>
    <cd>3</cd>
    <video>3</video>
    <hinweis>3</hinweis>
  </projekt>
  <projekt>
    <nr>4</nr>
    <thema>4</thema>
    <name>4</name>
    <cd>4</cd>
    <video>4</video>
    <hinweis>4</hinweis>
  </projekt>
</projekte>
EOT;

$dom = new DomDocument();
$dom->loadXML($projekte);

// DOMNodeList->DOMNode:
$nrNode0 = $dom->getElementsByTagName('nr')->item(0);

// Knoteninhalt auslesen:
$nodeValue = $nrNode0->nodeValue;
// neuen Knoteninhalt einsetzen:
$nrNode0->nodeValue = 'Nummer'.$nodeValue;

// Angucken:
header('Content-type: text/xml');
echo $dom->saveXML();
?>
Ergebnis:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<projekte>
	<projekt>
		<nr>Nummer3</nr>
		<thema>3</thema>
		<name>3</name>
		<cd>3</cd>
		<video>3</video>
		<hinweis>3</hinweis>
	</projekt>
	<projekt>
		<nr>4</nr>
		<thema>4</thema>
		<name>4</name>
		<cd>4</cd>
		<video>4</video>
		<hinweis>4</hinweis>
	</projekt>
</projekte>
 
PHP:
	if(isset($_POST["nr"])){
		$nr = $_POST["nr"];
		
		$dom = new DomDocument();
		$dom->load('1.0.xml');
		if(!$dom) {
			exit ("Fehler beim Parsen");
		}

		$zwischen0 = $dom->getElementsByTagName('nr')->item(0);
		$nummer = $zwischen0->nodeValue;
		$nummer->nodeValue = &nr;
		echo $nummer;
	}

Soweit ist das mein Code jetzt. Mhm klappt leider nicht so ganz^^:D
 
PHP:
// ...

		$zwischen0 = $dom->getElementsByTagName('nr')->item(0);
		$nummer = $zwischen0->nodeValue;
		$nummer->nodeValue = &nr;
		echo $nummer;
	}
Soweit ist das mein Code jetzt. Mhm klappt leider nicht so ganz^^:D
  • $zwischen0 = $dom->getElementsByTagName('nr')->item(0);
    $zwischen0 ist vom Typ D]OMNode
  • $nummer = $zwischen0->nodeValue;
    Jetzt wird auf diesen Knoten die nodeValue-Eigenschaft angewendet und das Ergebnis (in Variable $nummer) ist ein String mit dem Knoteninhalt.

Warum versuchst du jetzt die nodeValue-Eigenschaft noch mal (und dazu noch auf eine Stringvariable) anzuwenden?
 
Zurück