вопрос по парсеру xml

Тема в разделе "PHP", создана пользователем zhito, 25 ноя 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. zhito

    zhito

    Регистр.:
    23 авг 2007
    Сообщения:
    165
    Симпатии:
    22
    есть такой парсер xml
    PHP:
    function startElement($parser$name$attrs) {
       if (
    $attrs["PRODUCT"] == 'blabla') {
        echo 
    $attrs["PRICE"];
        }
    }

    function 
    endElement($parser$name) {
     
    }

    function 
    stringElement($parser$desc) {
        echo 
    $desc;    
    }

    $file  "data.xml";
    $xml_parser xml_parser_create();
    xml_set_element_handler($xml_parser"startElement""endElement");
    xml_set_character_data_handler($xml_parser"stringElement");

    if (!(
    $fp fopen($file"r"))) {
        die(
    "could not open XML input");
    }

    while (
    $data fgets($fp)) {
        if (!
    xml_parse($xml_parser$datafeof($fp))) {
            echo 
    "<br>XML Error: ";
            echo 
    xml_error_string(xml_get_error_code($xml_parser));
            echo 
    " at line ".xml_get_current_line_number($xml_parser);
            break;
        }
    }
       
    xml_parser_free($xml_parser);
    вопрос как сделать так чтобы $desc из функции stringElement выводилась только когда $attrs["PRODUCT"] == 'blabla' ?
     
  2. Liver

    Liver

    Регистр.:
    24 сен 2008
    Сообщения:
    316
    Симпатии:
    91
    А если сделать такие изменения?
    PHP:
    function startElement($parser$name$attrs){
        if(
    $attrs["PRODUCT"]=='blabla'){
            
    $GLOBALS['outStringElement']=1;
            echo 
    $attrs["PRICE"];
        }else{
            
    $GLOBALS['outStringElement']=0;
        }
    }

    function 
    endElement($parser$name){

    }

    function 
    stringElement($parser$desc){
        if(
    $GLOBALS['outStringElement']==1)
            echo 
    $desc;
    }

     
  3. zhito

    zhito

    Регистр.:
    23 авг 2007
    Сообщения:
    165
    Симпатии:
    22
    нет, к сожалению, так вообще $desc не выводится, а в первом (моем) варианте выходят вообще все существующие в базе :(
     
  4. myweb

    myweb Среда обитания WEB

    Регистр.:
    10 сен 2007
    Сообщения:
    539
    Симпатии:
    246
    Как вам вариант все считать в массив, а затем перебрать массив?
    Как прочитать в архив :read:


    Перейти по ссылке

     
  5. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    PHP:
    function stringElement($parser$desc) { 
        global 
    $attrs;

        if (
    $attrs["PRODUCT"] == 'blabla')
        {
            echo 
    $desc;
        }
    }
     
Статус темы:
Закрыта.