Autor | Zpráva | ||
---|---|---|---|
bagocina Profil |
#1 · Zasláno: 31. 10. 2012, 00:02:15
Ahojte
Chcel by som vás poprosiť o radu. Mám rozsah IDčiek vo foreach. Tie sú dosadzovanie následne do linkov, ktoré otvárajú cez SimpleXML súbory typu XML. Z nich chcem vyťahovať rôzne informácie na základe pevne daných ciest. No je tu ten problém, že nie všetky dokumenty majú rovnakú štruktúru. Prikladám dva dokumenty: http://www.uvo.gov.sk/sk/evestnik/-/vestnik/save/185488.xml a http://www.uvo.gov.sk/sk/evestnik/-/vestnik/save/185485.xml V oboch dokumentoch sa nachádza aj tento kód: <Label Title="NUTS kód: " /> <SelectList FormComponentId="nuts" Type="NUTS" Value="10"> <SelectListValue Title="SK032" Id="10" /> </SelectList> z neho potrebujem vybrať "SK032". No lenže tu nastáva problém, že v prvom dokumente je iná cesta k tomuto úryvku a v druhom dokumente je iná. Už si fakt neviem rady, pretože mi kvôli tomuto zlyháva aj foreach, keďže keď narazí na error, že objekt nevie nájsť, ďalej sa už nespustí. Ďakujem veľmi pekne za pomoc. |
||
Oison Profil |
#2 · Zasláno: 31. 10. 2012, 08:08:26
Use SAX - dokumentace - http://php.net/manual/en/book.xml.php
<?php /* Načteme data ze souboru */ $xml = file_get_contents("xml.xml"); /* Vytvoříme parser */ $parser = xml_parser_create(); /* Přidáme handler, když to najde nějaký element (začátek a konec) * Jak to najde, tak se nám volá funkce: * - začátek elementu -> startElement * - konec elementu -> endElement */ xml_set_element_handler($parser, "startElement", "endElement"); /* Spustíme parser */ xml_parse($parser, $xml); /* * Funkce, která je zavolána při najití začátku elementu * @parm $parser nas parser * @parm $name string jmeno elementu * @parm $attrs array pole atributu elementu * Ověříme, že nalezený element je SELECTLISTVALUE a ověříme jestli má atribut TITLE * Pokud ano, tak tento atribut vypiseme */ function startElement($parser, $name, $attrs){ if($name == "SELECTLISTVALUE") if(isset($attrs['TITLE'])){ echo $attrs['TITLE']; } } /* * To stejné, ale konce elementu * Teď nepodstatné! */ function endElement($parser, $name){} |
||
Tori Profil |
Přes XPath se dá vyhledat libovolně zanořený prvek. Tohle hledá strukturu
<SelectList FormComponentId="nuts"><SelectListValue Title="(cokoliv)"/></SelectList>
$files = array('oznamenie_185488.xml', 'oznamenie_185485.xml'); foreach($files as $file) { $doc = new DOMDocument; $doc->preserveWhiteSpace = false; $doc->validateOnParse = false; $doc->Load($file); $xpath = new DOMXPath($doc); // nastavení výchozího NS je nutné, bez něj nefunguje $rootNamespace = $doc->lookupNamespaceUri($doc->namespaceURI); $xpath->registerNamespace('x', $rootNamespace); $title = $xpath->query('//x:SelectList[@FormComponentId="nuts"]/x:SelectListValue[1]/@Title')->item(0)->nodeValue; echo "\n Nalezena hodnota: $title"; } |
||
bagocina Profil |
#4 · Zasláno: 31. 10. 2012, 13:21:18
Ďakujem Vám veľmi pekne za pomoc!
|
||
Časová prodleva: 11 let
|
0