Jak spojit dva xml soubory se stejnou strukturou – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Jak spojit dva xml soubory se stejnou strukturou – PHP – Fórum – Programujte.comJak spojit dva xml soubory se stejnou strukturou – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Milky0
Duch
20. 4. 2012   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 93.181.76.–
Čest Milky
CZechBoY+4
Věrný člen
20. 4. 2012   #2
-
0
-

já bych to hodil do pole a použil usort :)

Nahlásit jako SPAM
IP: 213.192.10.–
Milky0
Duch
20. 4. 2012   #3
-
0
-

#2 CZechBoY
Toto svedu, ale jak ty xml spojit do jednoho xml souboru pořád nějak nechápu.

echo 'Výpis elem. hits z 1. xml souboru: <br/>';
$xml = simplexml_load_file("test.xml");
$result = $xml->xpath("//item");

  foreach ($result as $item) {
  $typek = $item['typ'];
  $idecko = $item['id'];
  $hitik = $item['hits'];
  echo $hitik.'<br/>';
  }
echo 'Výpis el. elem z 2. xml souboru: <br/>';  
$xml2 = simplexml_load_file("test2.xml");
$result2 = $xml2->xpath("//item");

  foreach ($result2 as $item) {
  $typek2 = $item['typ'];
  $idecko2 = $item['id'];
  $hitik2 = $item['hits'];
  echo $hitik2.'<br/>';
  }
Nahlásit jako SPAM
IP: 93.181.76.–
Čest Milky
Milky0
Duch
20. 4. 2012   #4
-
0
-

#2 CZechBoY
a takto je jednoduše seřadím:

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

  foreach ($result3 as $item3) {
  $typek3 = $item3['typ'];
  $idecko3 = $item3['id'];
  $hitik3 = $item3['hits'];
  echo $hitik3.'<br/>';
  }

Jenom ty dvě xml spojit do jednoho. Asi jsem natvrdlej. Prosím pořádně nakopnout.

Nahlásit jako SPAM
IP: 93.181.76.–
Čest Milky
Milky0
Duch
21. 4. 2012   #5
-
0
-

Toto jsem našel, snad by to mělo dělat to co potřebuji, ale nedělá. Jestli tomu někdo rozumí, prosím poraďte.

$filenames = array(0 => "test.xml", 1 => "test2.xml" ); 
$docList = new DOMDocument(); $root = $docList->createElement('documents'); 
$docList->appendChild($root); foreach($filenames as $filename) { $doc = new DOMDocument(); 
$doc->load($filename); $xmlString = $doc->saveXML($doc->documentElement); 
$xpath = new DOMXPath($doc); $query = "//item";

// this is the name of the ROOT element 
$nodelist = $xpath->evaluate($query, $doc->documentElement); 
  if( $nodelist->length > 0 ) { 
  $node = $docList->importNode($nodelist->item(0), true); 
  $xmldownload = $docList->createElement('document'); 
  $xmldownload->setAttribute("filename", $filename); 
  $xmldownload->appendChild($node); 
  $root->appendChild($xmldownload); 
  } 
} echo $docList->saveXML();
Nahlásit jako SPAM
IP: 93.181.76.–
Čest Milky
Milky0
Duch
22. 4. 2012   #6
-
0
-

Třeba to někomu pomůže. Spojí to 2 xml soubory, uloží je, načte, seřadí a zpracuje.

<?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 "&#160;">
    <!ENTITY amp "&#38;">
    <!ENTITY lt "&#60;">
    <!ENTITY gt "&#62;">
    <!ENTITY ndash "&#8211;">
    <!ENTITY quot "&#34;">
    <!ENTITY times "&#215;">

]>'.$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/>';
  }
?>
Nahlásit jako SPAM
IP: 84.16.125.–
Čest Milky
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 73 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý