Ukázka modifikace dokumentu

Příklad 10. dom/modifikace.php

<?php

// Nastavení výstupního typu dat
Header("Content-type: text/xml");

// načtení XML dokumentu do paměti do DOM stromu
$doc = DOMDocument::load("../data/faktura.xml"); 

// průchod dokumentem a oprava DPH
Traverse($doc->documentElement);

// přidání nové položky

// vytvoření elementu polozka
$polozka = $doc->createElement("polozka");

// vytvoření elementu popis
$popis = $doc->createElement("popis");
$popisText = $doc->createTextNode("Paušální poplatek za vlastnění počítače");
$popis->appendChild($popisText);

// vytvoření elementu cena
$cena = $doc->createElement("cena");
$cena->setAttribute("dph", "5");
$cenaText = $doc->createTextNode("4000");
$cena->appendChild($cenaText);

// připojení elementů popis a cena k elementu polozka
$polozka->appendChild($popis);
$polozka->appendChild($cena);

// připojení nové položky k faktuře
$faktura = $doc->documentElement;
$faktura->appendChild($polozka);

// zapsání upraveného dokumentu XML na výstup
echo $doc->saveXML();

// ukázka rekurzivního průchodu DOM stromem
function Traverse($node)
{
  // v elementu cena provedeme úpravu sazby DPH
  if ($node->nodeType == XML_ELEMENT_NODE && $node->nodeName == "cena")
  {
    $node->setAttribute("dph", "19");
  }
  else
  {
    // rekurzivní volání funkce pro průchod stromem pro všechny děti
    if ($node->hasChildNodes())
      foreach ($node->childNodes as $n)
      {
	Traverse($n);
      }
  }
}

?>