🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

7 total messages Started by mariusz Wed, 19 Mar 2008 14:57
[XML] - Jak wyciagnac pojedyncze dane
#9763
Author: mariusz
Date: Wed, 19 Mar 2008 14:57
36 lines
2178 bytes
Witam,

Przedstawie moj problem na przykladzie:
<parametry>
   <parametra1>aaa</parametr1>
   <parametra2>bbb</parametr2>
   <parametra3>ccc</parametr3>
   <parametra4>
      <wartoscx>
         <dana1>aaa</dana1>
         <dana2>bbb</dana2>
         <dana3>ccc</dana3>
         <dana4>ddd</dana4>
      </wartoscx>
      <wartoscx>
         <dana1>aaa</dana1>
         <dana2>bbb</dana2>
         <dana3>ccc</dana3>
         <dana4>ddd</dana4>
      </wartoscx>
   </parametr4>
</parametry>

Gdy probuje wyswietlic dana1 z galezi wartoscx wyswietlaja mi sie
wszystkie dane1 jedna po drugiej.
Problem w tym ze podgalez Parametru 4 zawsze ma taka sama nazwe
(wartoscx).

Jak sterowac wyswietlaniem wartoscx?
Jak wyswietlic tylko pierwsza dana1 z pierwszej galezi wartoscx?

Szukalem juz wszedzie ale nie znalazlem rozwiazania. Moga byc jakies
podpowiedzi.
Z gory dziekuje

Mariusz
Re: [XML] - Jak wyciagnac pojedyncze dane
#9764
Author: TOUDIdel
Date: Thu, 20 Mar 2008 07:37
21 lines
1654 bytes
Użytkownik <mariusz@poplawski.org.uk> napisał w wiadomości 
news:15d5fb4c-e244-4a01-b0eb-2d2122b5c1a8@s12g2000prg.googlegroups.com...
> Gdy probuje wyswietlic dana1 z galezi wartoscx wyswietlaja mi sie
> wszystkie dane1 jedna po drugiej.
> Problem w tym ze podgalez Parametru 4 zawsze ma taka sama nazwe
> (wartoscx).

I bardzo dobrze, ze nazwa taka sama - nic tak nie ulatwia zycia jak 
regularnosc

> Jak sterowac wyswietlaniem wartoscx?

wyswietlaniem gdzie i czym?

> Jak wyswietlic tylko pierwsza dana1 z pierwszej galezi wartoscx?

/parametry/parametra4/wartoscx/dana1/text()

-- 
td 
Re: [XML] - Jak wyciagnac pojedyncze dane
#9768
Author: szomiz
Date: Thu, 20 Mar 2008 12:38
9 lines
1365 bytes
Użytkownik <mariusz@poplawski.org.uk> napisał w wiadomości 
news:15d5fb4c-e244-4a01-b0eb-2d2122b5c1a8@s12g2000prg.googlegroups.com...

> Szukalem juz wszedzie ale nie znalazlem rozwiazania. Moga byc jakies
> podpowiedzi.

Nie wszedzie. Bylo na grupie tydzien temu.

sz. 
Re: - Jak wyciagnac pojedyncze dane
#9765
Author: SOLVER
Date: Thu, 20 Mar 2008 20:14
88 lines
3975 bytes
Na chwile obecna uzywam takiego parsera:

<?
// main function for parsing xml file
function MPxmlParse($file) {
    ini_xml(); //in globals variables
    $rXMLPARSER = xml_parser_create();
    xml_parser_set_option($rXMLPARSER, XML_OPTION_CASE_FOLDING, 1);
    xml_set_element_handler($rXMLPARSER, 'start_element',
'close_element');
    xml_set_character_data_handler($rXMLPARSER,'character_data');
    $fp = fopen($file, 'r');
    while($sXmlStream = fread($fp, 4096)) {
        if (!xml_parse($rXMLPARSER, $sXmlStream, feof($fp))) {
            die(sprintf("XML error: %s at line %d",
            xml_error_string(xml_get_error_code($rXMLPARSER)),
            xml_get_current_line_number($rXMLPARSER)));
        }
    }
    fclose($fp);
    $aRet['hotels'] = $GLOBALS[aXmlTotalElements];
    $aRet['infos']      = $GLOBALS[xmlInfos];
    return $aRet;
}

//start_element
function start_element($parser, $name, $attrs='') {
    $name =  strtolower(trim($name));
    $GLOBALS[sXmlactualElement] = $name;
    if(in_array($name, $GLOBALS[aSpecialElements])) {
        $GLOBALS[xmlElementCpt]++;
    }elseif($name == 'drt') {
        $GLOBALS[aXmlAttrs] = $attrs;
    }
}

///close_element
function close_element($parser, $name, $attrs='') {
    $name =  strtolower(trim($name));
    if($name == 'hotel' && $GLOBALS[sXmlactualElement] != 'file') {
        $GLOBALS[xmlElementCpt]++;
    }
}

//character_data
function character_data($parser, $data='') {
    if($GLOBALS[sXmlactualElement] != 'hotel'
    && $GLOBALS[sXmlactualElement] != 'drt'
    && !in_array($GLOBALS[sXmlactualElement],
$GLOBALS[aSpecialElements]) ) {
        $GLOBALS[aXmlTotalElements][$GLOBALS[xmlElementCpt]]
[$GLOBALS[sXmlactualElement]].= trim($data);
    }elseif($GLOBALS[sXmlactualElement] == 'drt') {
        $GLOBALS[xmlInfos] = $GLOBALS[aXmlAttrs];
    }else{
        if($GLOBALS[sXmlactualElement] != 'hotel') {
            $GLOBALS[xmlInfos][$GLOBALS[sXmlactualElement]].=
trim($data);
        }
    }
}

//initialize xml variables
function ini_xml() {
    $GLOBALS[aXmlTotalElements]     = array();
    $GLOBALS[sXmlactualElement]     = '';
    $GLOBALS[xmlElementCpt]         = 0;
    $GLOBALS[aXmlAttrs]             = array();
    $GLOBALS[xmlInfos]                = array();
    $GLOBALS[aSpecialElements] =
array('hotel','first_url','last_url','next_url','prev_url');
}
?>

a tak wyswietlam zawartosc:
include('include/functions/_xml_parser.php');
$sFile = 'http://xmlfile.xml';
$aArray = MPxmlParse($sFile); $aRess = $aArray['hotels'];
foreach ($aRess as $aInfo)
{
   echo$hotel_name=$aInfo['hotel_name'];
}

Czy da sie w jakis sposob zmodyfikowac skrypt abym mogl wyswietlic
potrzebne dane?

Pozdrawiam
Mariusz
Re: - Jak wyciagnac pojedyncze dane
#9769
Author: SOLVER
Date: Thu, 20 Mar 2008 20:22
8 lines
1358 bytes
> Nie wszedzie. Bylo na grupie tydzien temu.

Przeszukalem jeszcze raz grupe, post po poscie az do grudnia 2007.
Niczego, nawet podobnego nie spotkalem.


Mariusz
Re: - Jak wyciagnac pojedyncze dane
#9766
Author: szomiz
Date: Thu, 20 Mar 2008 20:30
7 lines
1413 bytes
Uzytkownik "SOLVER" <mariusz@poplawski.org.uk> napisal w wiadomosci 
news:03404a99-5b86-4278-8f7b-9ee2e9d3bfe3@e6g2000prf.googlegroups.com...
> Na chwile obecna uzywam takiego parsera:

A uzyj DOM'a i xPath'a...

sz. 
Re: - Jak wyciagnac pojedyncze dane
#9767
Author: TOUDIdel
Date: Fri, 21 Mar 2008 08:56
14 lines
1552 bytes
Uzytkownik "SOLVER" <mariusz@poplawski.org.uk> napisal w wiadomosci 
news:03404a99-5b86-4278-8f7b-9ee2e9d3bfe3@e6g2000prf.googlegroups.com...

> Czy da sie w jakis sposob zmodyfikowac skrypt abym mogl wyswietlic
> potrzebne dane?

XPath to dobra wskazówka - wtedy wyluskanie kolekcji wezlów, które 
potrzebujesz uprszcza sie do mniej wiecej czegos takiego:

/parametry/parametra4/wartoscx/dana1/text()

-- 
td 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads