Toto vlákno bylo označeno za vyřešené.
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.
CZechBoY +4
Věrný člen
já bych to hodil do pole a použil usort :)
#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/>';
}
#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.
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();
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 " ">
<!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/>';
}
?>
Zjistit počet nových příspěvků
Přidej příspěvek
Uživatelé prohlížející si toto vlákno Uživatelé on-line: 0 registrovaných, 69 hostů