Autor Zpráva
Milkys
Profil
Dobrý podvečer,
Prosím Vás mohl by mi někdo poradit jak sloučit dva xml soubory se stejnou strukturou a zároveň je seřadit podle jednoho elementu např. elementu hits?
Osobně používám na rozsekání xml xpath a na řazení sortedxpath, ale nyní jsem v koncích.
Třeba bude stačit odkaz kde se to řeší.

Struktura xml souborů:
<items>
 <item
  typ="2"
  id="10362"
  hits="311167" />
 <item
  typ="1"
  id="10362"
  hits="22167" />
</items>


Předem děkuji.
mimochodec
Profil
Jestli je ta struktura jednoúrovňová, jak tady v té ukázce, tak by neměl být problém načíst to v php do dvourozměrného pole a seřadit v něm.
Milkys
Profil
Ano, struktura je jednoúrovňová. Na zpracování xml dokumentů (i na ty "hlubší") používám úspěšně simplexml.
Něco jsem našel, že to bude jako $promena[neco][jeste_neco];
Můžete mi prosím ukázat příklad - v php jsem začátečník. Je to ten příklad s šachama zde? Hledám správně?

include ('SimpleDOM.php');
echo 'Seřazení elem. hits z 1. xml souboru: <br/>';
$xml = simpledom_load_file("test.xml");
$result = $xml->sortedxpath("//item",'@hits', SORT_DESC);

  foreach ($result as $item) {
  $typek = $item['typ'];
  $idecko = $item['id'];
  $hitik = $item['hits'];
  echo $hitik.'<br/>';
  }
Stejným způsobem mohu zpracovat i druhý test2.xml se stejnou strukturou.
Milkys
Profil
Funkční řešení. Třeba to někomu pomůže.
<?php
include ('SimpleDOM.php');

echo 'Spojení dvou xml soouborů a jejich seřazení dle hits:<br/>';

//vytvoření prvního pole ze souboru test.xml
$xml = simplexml_load_file("test.xml");
$result = $xml->xpath("//item");

//vytvoření druhého pole ze souboru test2.xml
$xml = simplexml_load_file("test2.xml");
//připojení nového pole za to stávající
$result = array_merge ($result,$xml->xpath("//item"));

$endline = "\n";
$vystup = '<?xml version="1.0" encoding="utf-8"?>'.$endline;
$vystup .= '<!DOCTYPE hotels [
    <!ENTITY nbsp " ">
    <!ENTITY amp "&">
    <!ENTITY lt "<">
    <!ENTITY gt ">">
    <!ENTITY ndash "–">
    <!ENTITY quot """>
    <!ENTITY times "×">

]>'.$endline;
$vystup .= '<items>'.$endline;

  foreach ($result as $item) {
  $typek = $item['typ'];
  $idecko = $item['id'];
  $hitik = $item['hits'];
  

  $vystup .= '<item'.$endline;
  $vystup .= 'typ="'.$typek.'"'.$endline;
  $vystup .= 'id="'.$idecko.'"'.$endline;
  $vystup .= 'hits="'.$hitik.'" />'.$endline;

  }
  
$vystup .= '</items>'.$endline; 
  
$fop = fopen("spojene-soubory.xml", "w");
fwrite($fop, $vystup);
fclose($fop);

$xml3 = simpledom_load_file("ubytovani.xml");
$result3 = $xml3->sortedxpath("//item",'@hits', SORT_DESC);
  foreach ($result3 as $item3) {
  $typek3 = $item3['typ'];
  $idecko3 = $item3['id'];
  $hitik3 = $item3['hits'];
  echo $hitik3.'<br/>';
  }
?>
Vztahuje se k výše uvedeným souborům xml.

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: