Autor Zpráva
soucekgns
Profil
Mám takovýto vstupní formulář:

a soubor xml:
<?xml version="1.0" encoding="UTF-8"?>
<vse>
<den>1</den>
<den>2</den>
<den>3</den>
...
<den>31</den>
</vse>

Potřeboval bych, aby se "Text události" zapsal do souboru xml do příslušného dne vybraného ve formuláři:
<den>4<udalost>Text udalosti</udalost></den>


Na normální zapisování jsem používal tento script, ale s tímhle si nevím rady:
$xmlzadani = ("<udalost>$text_udalosti</udalost>");
  $novyradek = "$xmlzadani";
  
  $lines = file("udalosti.xml");
  $noveudaje = "";

  foreach($lines as $line_num => $line) {
    if(rtrim($line) != "<vse>") {
      $noveudaje .= $line;
    }
    else {
      $noveudaje .= $line;
      $noveudaje .= $novyradek . "\n";       
    }
  }
  
  $fd = fopen("udalosti.xml", "w");
  fwrite($fd, $noveudaje);
  fclose($fd);

Díky za rady
Joker
Profil
soucekgns:
Jestli to má ukládat událost v nějaký den, asi logičtější by bylo, kdyby hlavní prvek byla událost, která obsahuje den a nějaký text. Stačila by na to i jedna značka:
<udalost den="1">text události</udalost>

K tomu kódu:
1. Proč se vlastně namáhat s tím „XML“, když se ten soubor pak čte po řádcích a porovnává textově? Když XML, tak snad XML parser.

2. Jaký přesně význam má řádek 2?
  $novyradek = "$xmlzadani";

3. Opravdu se mají nové údaje vložit za každý řádek který není roven "<vse>"? Například ve vzorovém XML se pak data vloží na vyznačená místa
soucekgns
Profil
Joker:
1. Proč se vlastně namáhat s tím ‚XML‘
- To je zdlouhavé...
2. Jaký přesně význam má řádek 2?
...to je jen pro ukázku... ten script je složitější
3. Opravdu se mají nové údaje vložit za každý řádek který není roven "<vse>"?
Nevím, zda je to špatně, každopádně to funguje a SPRÁVNĚ:-)

--- Značka by stačila, ale pořád to neřeší problém, protože existuje takovýto soubor a já chci teď zapsat událost do dne 2
<udalost den="1"></udalost>
<udalost den="2"></udalost>
<udalost den="3"></udalost>
Joker
Profil
soucekgns:
ad 3. moje chyba, otočil jsem si tu podmínku.

Jinak jak už jsem říkal- moje rada je použít XML parser.
soucekgns
Profil
Joker:
rada je použít XML parser
V tomhle se moc nevyznám, nevíte někdo nějakou stránku, na které by to bylo popsané?
soucekgns
Profil
Tak jsem na w3schools našel takovýto script, ale jak to mám použít v php?
Například jak mám zapsat v php (nechci v javascriptu!) něco jako: if (y.getNamedItem("category").nodeValue == "1") { echo 'den první'; }
<script type="text/javascript">
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",dname,false);
xhttp.send();
return xhttp.responseXML;
}


xmlDoc=loadXMLDoc("books.xml");
ax=xmlDoc.getElementsByTagName("title");
ay=xmlDoc.getElementsByTagName("author");
az=xmlDoc.getElementsByTagName("year");
x=xmlDoc.getElementsByTagName("book");
for (i=0;i<x.length;i++)
  {
  document.write(ax[i].childNodes[0].nodeValue + "<br />");
  document.write(ay[i].childNodes[0].nodeValue + "<br />");
  document.write(az[i].childNodes[0].nodeValue + "<br />");
  y=x[i].attributes;
  document.write(y.getNamedItem("category").nodeName);
  document.write(": ");
  document.write(y.getNamedItem("category").nodeValue);
  document.write("<br /><br />");
}

</script>

Díky za rady
Joker
Profil
soucekgns:
To je ovšem Javascript. PHP ale taky umí zpracovávat XML, viz třeba SimpleXML
soucekgns
Profil
Díky, tam je to hezky vysvětlený :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: