X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> парсинг из xml в mysql
LoaD_hb
LoaD_hb
Topic Starter сообщение 22.7.2008, 9:52; Ответить: LoaD_hb
Сообщение #1


В общем проблема заключается в следующем: Нужно из xml файла вытащить данные и вставить их в базу mysql... вот есть такие функции:
// Функция отвечает за обработку всех открывающих тегов.

function startTag($parser, $tagname, $attributes) {

        if ( $tagname == "MAG_BASE") {
            $this->m_vis->begin();
        }
        elseif ( $tagname == "MAGAZINE" ) {
            $this->m_vis->clear_data();
        }

        $this->tag = $tagname;
        $previos_start_tag = $tagname;

} // end function startTag

// Функция отвечает за обработку всех символьных данных.

function characterData($parser, $characterData) {

        echo $characterData;
}

// Функция отвечает за обработку всех закрывающих тегов.

function endTag($parser, $tagname) {
      
        if ( $tagname == "MAG_BASE") {
//            $this->m_vis->print_all_data();
            $this->m_vis->end();
        }
        elseif ( $tagname == "MAGAZINE" ) {
            $this->m_vis->print_magazine_list();
        }
}

function parse($fp) {

        // xml_parse($this->xm1parser,$data);
        // Обработать файл XML

        while ( $line = fread($fp, 4096) ) :

        // При возникновении ошибки прервать обработку
        // и вывести сообщение об ошибке.

        if ( ! xml_parse($this->xmlparser, $line, feof($fp))) :
        die(sprintf("XML error: %s at line %d",
               xml_error_string(xml_get_error_code($this->xmlparser)),
               xml_get_current_line_number($this->xmlparser)));

        endif;

        endwhile;

        xml_parser_free( $this->xmlparser );

Я сделал пробный фаил для проверки...
<?xml version='1.0' encoding='windows-1251'?>
<MAG_BASE>
    <MAGAZINE>
        <ID>1</ID>
        <TITLE>А почему?</TITLE>
        <PERIODICITY>12</PERIODICITY>
        <BIB_ID>2 4 6 11</BIB_ID>
        <COMMENT>Для детей о науке, природе, путешествиях в ответах на вопросы. Сказки, комиксы, игротека помогут приятно и творчески провести досуг</COMMENT>
    </MAGAZINE>
</MAG_BASE>

Вот отсюда мне нужно вытащить ID TITLE и COMMENT и вставить в базу mysql. Как я понял это нужно делать в функции function characterData($parser, $characterData) только вот как не могу понять...=(
Помогите люди добрые разобраться с этой проблемой...
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 22.7.2008, 10:41; Ответить: Webmaster_hb
Сообщение #2


что-то приведенный код далеко не полный, приведите весь код
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LoaD_hb
LoaD_hb
Topic Starter сообщение 22.7.2008, 11:00; Ответить: LoaD_hb
Сообщение #3


Webmaster, вот полный код:
<?
Class XMLHTML {

private $xmlparser,

        $tag,
        
        $m_vis;
        
public  $query = array();

function XMLHTML( ) {
    
        $this->xmlparser = xml_parser_create();

        xml_set_object($this->xmlparser, $this);

        xml_set_element_handler($this->xmlparser, "startTag", "endTag");

        xml_set_character_data_handler($this->xmlparser, "characterData");
        
        $this->m_vis = new VISUAL;
        
        $this->get_query();
}

// Ф-ия получает данные из формы

function get_query() {
}

// Функция отвечает за обработку всех открывающих тегов.

function startTag($parser, $tagname, $attributes) {

        if ( $tagname == "MAG_BASE") {
            $this->m_vis->begin();
        }
        elseif ( $tagname == "MAGAZINE" ) {
            $this->m_vis->clear_data();
        }

        $this->tag = $tagname;
        $previos_start_tag = $tagname;

} // end function startTag

// Функция отвечает за обработку всех символьных данных.

function characterData($parser, $characterData) {

        echo $characterData;
}

// Функция отвечает за обработку всех закрывающих тегов.

function endTag($parser, $tagname) {
      
        if ( $tagname == "MAG_BASE") {
//            $this->m_vis->print_all_data();
            $this->m_vis->end();
        }
        elseif ( $tagname == "MAGAZINE" ) {
            $this->m_vis->print_magazine_list();
        }
}

function parse($fp) {

        // xml_parse($this->xm1parser,$data);
        // Обработать файл XML

        while ( $line = fread($fp, 4096) ) :

        // При возникновении ошибки прервать обработку
        // и вывести сообщение об ошибке.

        if ( ! xml_parse($this->xmlparser, $line, feof($fp))) :
        die(sprintf("XML error: %s at line %d",
               xml_error_string(xml_get_error_code($this->xmlparser)),
               xml_get_current_line_number($this->xmlparser)));

        endif;

        endwhile;

        xml_parser_free( $this->xmlparser );
}

} // Конец реализации класса XMLHTML

// Открыть файл XML для обработки

$xml_file = "base/1.xml";

$fp = fopen ($xml_file, "r");

// Создать новый объект

$xml_parser = new XMLHTML;

// Обработать $xml_file

$xml_parser->parse($fp);

?>

Что-то никак не могу я вытащить эти данные=(
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 22.7.2008, 11:31; Ответить: Webmaster_hb
Сообщение #4


судя по коду вам достаточно указать имя файла - $xml_file = "base/1.xml"
но остальные функции у вас остаются без использования, это явно какой-то вырезанный кусок кода

лучше вам написать код сначала используя стандартные примеры из документации PHP - http://www.php.net/xml
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LoaD_hb
LoaD_hb
Topic Starter сообщение 22.7.2008, 12:02; Ответить: LoaD_hb
Сообщение #5


Webmaster, Прошу пращения, вот забыл выложить вот эту страницу:
<?

class VISUAL{
    private $tzapis = array (
                'ID' => '',
                'TITLE' => '',
                'PERIODICITY' => '',
                'BIB_ID' => '',
                'COMMENT' => ''
            );
// Устанавливает значене в массиве
    function set_element ( $key, $value ) {
        if ( !strlen( $value ) ) return;
        
//        if ( $key == "BIB_ID" ) {
//            $this->tzapis[$key] = split( " ", $value );
//            array_push( $this->tzapis[$key], $value );
//        }
//        else {
            $this->tzapis[$key] .= $value;
//        }
    }
    
    // Очищает массив
    function clear_data() {
        $this->tzapis['TITLE'] = '';
        $this->tzapis['COMMENT'] = '';
        $this->tzapis['BIB_ID'] = '';
//        array_splice( $this->tzapis['BIB_ID'], 0 );
        $this->tzapis['ID'] = '';
        $this->tzapis['PERIODICITY'] = '';
    }
    
// Выводит список журналов, начинающихся с этой буквы
    function print_magazine_list () {
        if ( empty( $_GET['first_char'] ) || !isset( $_GET['first_char'] ) ) $_GET['first_char'] = 'а';
        
        $pos = strpos( strtoupper($this->tzapis['TITLE']), strtoupper($_GET['first_char']) );

        if ( $pos !== false && $pos == 0 ) {
            print "<tr><td align=left width=40%>\n";
                print "<a href=\"mag/index.php?id=".$this->tzapis['ID']."&bib=".urlencode($this->tzapis['BIB_ID'])."\">".$this->tzapis['TITLE']."</a>";
            print "</td>\n";
            print "<td align=left><i><font size=2>".$this->tzapis['COMMENT']."</font></i></td>\n";
            print "</tr>";
        }
    }

} // Конец реализации класса VISUAL

/*$per = new VISUAL();
$per->begin();
*/
?>

Мне не нужно чтобы все выводилось на экран, мне просто нужно записать их в базу...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 22.7.2008, 12:51; Ответить: Webmaster_hb
Сообщение #6


LoaD, зачем использовать громоздкий код в котором вы даже не разбираетесь ?
есть стандартная функция - xml_parse_into_struct - она преобразовывает данные из XML-файла в структуру (массив), осталось только этот массив занести в базу данных
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LoaD_hb
LoaD_hb
Topic Starter сообщение 22.7.2008, 15:08; Ответить: LoaD_hb
Сообщение #7


Webmaster, Спасибо за помощь, буду разбираться с этой функцией=)

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыТрафик в Телеграм (рассылка, инвайт, парсинг)
9 gelt 2847 8.4.2024, 15:28
автор: gelt
Открытая тема (нет новых ответов) Нужен сайт с автонаполнением по XML
1 REGNET 1227 7.3.2024, 15:08
автор: REGNET
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1242 24.11.2023, 14:46
автор: alexey
Открытая тема (нет новых ответов) ВКонтакте: полный комплекс услуг (массовая рассылка по стенам групп и в ЛС), парсинг, лайки, инвайты
Гарантия самой низкой цены
4 MaxChemist 1918 1.1.2023, 13:23
автор: MaxChemist
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыСбор баз, парсинг информации, постинг, автоматизация
Качественно и в срок
21 SEOMR 20839 22.7.2022, 15:10
автор: iodjin


 



RSS Текстовая версия Сейчас: 19.4.2024, 22:04
Дизайн