Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:dom_xml

XML-Dokument mit DOM erstellen

Einfaches Beispiel

$dom = new DOMDocument( '1.0', 'UTF-8' );
$dom->xmlStandalone = true;
$dom->formatOutput = true;
 
$adressen = $dom->createElement( 'Adressen' );
$dom->appendChild( $adressen );
 
$lieferanschrift = $dom->createElement( 'Lieferanschrift' );
$lieferanschrift->appendChild( $dom->createElement( 'Strasse', 'Teststraße' ) );
$lieferanschrift->appendChild( $dom->createElement( 'Postleitzahl', 12345 ) );
$lieferanschrift->appendChild( $dom->createElement( 'Ort', 'Testort' ) );
$adressen->appendChild($lieferanschrift );
 
$rechnungsanschrift = $dom->createElement( 'Rechnungsanschrift' );
$rechnungsanschrift->appendChild( $dom->createElement( 'Strasse', 'Teststraße' ) );
$rechnungsanschrift->appendChild( $dom->createElement( 'Postleitzahl', 12345 ) );
$rechnungsanschrift->appendChild( $dom->createElement( 'Ort', 'Testort' ) );
$adressen->appendChild( $rechnungsanschrift );
 
echo $dom->saveXML();

Erweiterung eines bestehendem DOM-Objektes um Elemente aus einem Array

function UpdateNode( $domObj, $nodeObj, $Array )
{	
	if( count( $Array ) > 0 )
	{
		foreach( $Array as $Tag => $TextNode ) // XML aus allen Formulardaten erstellen
		{
			$Tag = ( is_numeric( $Tag ) ) ? "id_" . $Tag : $Tag;  // num. Array durch Präfix erg.
 
			$Entry = $nodeObj->appendChild( $domObj->createElement ( $Tag ) );
			$Entry->appendChild( $domObj->createTextNode( $TextNode ) );
		}
	}
}

Erweiterung eines Bestehendes DOM-Objekt um einen XML-Knoten:

function InsertNode( $domObj, $Element, $nodeName, $Array )
{
	$nodeObj = $Element->appendChild( $domObj->createElement( $nodeName ) );
 
	if( count( $Array ) > 0 )
	{
		foreach( $Array as $Tag => $TextNode ) // XML aus allen Formulardaten erstellen
		{
			$Tag = ( is_numeric( $Tag ) ) ? "id_" . $Tag : $Tag;  // num. Array durch Präfix erg.
			$Entry = $nodeObj->appendChild( $domObj->createElement( $Tag ) );
			$Entry->appendChild( $domObj->createTextNode( $TextNode ) );
		}
	}
}

Beispiel für Aufruf der beiden oben aufgeführten Funktionen

Aufruf:

$DOM = new DOMDocument;
$request = $DOM->appendChild( $DOM->createElement( 'request' ) );
UpdateNode( $DOM, $request, $_POST['Stammdaten'] );
InsertNode( $DOM, $request, "Vertragsdaten", $_POST['Vertragsdaten'] );

Ergebnis:

<request>
	<Strasse>Lindenstraße 3</Strasse>
	<PLZ>81545</PLZ>
	<Ort>München</Ort>
	<Vertragsdaten>
		<id_0>6APG2</id_0>
		<id_1>6AT4N</id_1>
	</Vertragsdaten>
</request>

Troubleshooting

Bestimmte Zeichen dürfen in einem XML-Dokument nicht vorkommen und müssen zuvor umgewandelt werden:

  • & (kaufmännisches UND)
  • < (kleiner als)
  • > (größer als)

Mit der PHP-Funktion htmlspecialchars können diese Zeichen umgewandelt werden:

  • $val = htmlspecialchars( $val, ENT_XML1, 'UTF-8' );
php/dom_xml.txt · Zuletzt geändert: 2022/09/28 11:49 von webproducer