Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: parser xml
Forum PHP.pl > Forum > XML, AJAX
psychol1986
Witam chciałbym napisać parser XML, jednak nie mam zielonego pojecia o tym:) Czy mógłby ktoś udostępnić może jakis tutorial na ten temat? albo przesłać gotowy parser, żebym mógł na jego podstawie zrozumiec całą idee?
wookieb
A po co ci pisać skoro masz wybór szerszy niż w hipermarkecie http://pl2.php.net/manual/pl/refs.xml.php
psychol1986
A ktora opcja byłaby najlepsza? Chodzi mi żebym mógł potem dane wprowadzic do bazy danych.
wookieb
Zalezy jakiej wielkosci xml
Małe wystarczy simpleXml

Duże lepiej uzyc xml parser.

A z kazdej opcji bedziesz mogl potem wprowadzic z bazy. Przeciez po to jest parser zebys z tymi danymi mogl robic co chcesz. Wiec pytanie uznam za nielogiczne.
psychol1986
Moze racja pytanie retoryczne. Mam jeden duzy plik xml jakies 19tys linii kodu wiec pewnie bede musial uzyc xml parser. A czy moglbyś przedstawić jakiś przykład z wstawianiem odrazu do bazy? Pewnie wymagam za wiele ale pierwszy raz zajmue sie czyms takim a na przykladach czlowiek czuy sie najlepiej.
erix
Cytat
Duże lepiej uzyc xml parser.

A nie XML Reader?

Cytat
Pewnie wymagam za wiele ale pierwszy raz zajmue sie czyms takim a na przykladach czlowiek czuy sie najlepiej.

A zaglądałeś w ogóle do dokumentacji? Wpisałeś cokolwiek w Google? Bo mam wątpliwości.
psychol1986
Już wiem mniej więcej co i jak:). Jednak cały czas mi sie dodaje do tabeli tak: 1 rekord poprawnie i 4 puste.
To jest kod php:

Kod
<?php
$file = "storey.xml";

$uchwyt=mysql_connect('localhost','root','')
or die('Nieudane połączenie z bazą danych...');
mysql_select_db('x-project')
or die('Nie udało się wybrać bazy danych...');

function trustedFile($file)
{
    // only trust local files owned by ourselves
    if (!preg_match("@^([a-z]+)\:\/\/@i", $file)
        && fileowner($file) == getmyuid()) {
            return true;
    }
    return false;
}

function startElement($parser, $name, $attribs)
{
    echo "&lt;<font color=\"#0000cc\">$name</font>";
  
    if (count($attribs)) {
        foreach ($attribs as $k => $v) {
            echo " <font color=\"#009900\">$k</font>=\"<font
                   color=\"#990000\">$v</font>\"";
                     $zapytanie="INSERT INTO storey (Id) values ('$v')";
                    $add=mysql_query($zapytanie);
                      if($add)      echo 'Dodano nowy rekord<br>';
                      else            echo 'Błąd podczas dodawania<br>';
        }
    }
    echo "&gt;";
}

function endElement($parser, $name)
{
    echo "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}

function characterData($parser, $data)
{
    echo "<b>$data</b>";
     $zapytanie="INSERT INTO storey (Storey) values ('$data')";
    $add=mysql_query($zapytanie);
     if($add)      echo 'Dodano nowy rekord<br>';
     else            echo 'Błąd podczas dodawania<br>';
    
}

function PIHandler($parser, $target, $data)
{
    switch (strtolower($target)) {
        case "php":
            global $parser_file;
            // If the parsed document is "trusted", we say it is safe
            // to execute PHP code inside it.  If not, display the code
            // instead.
            if (trustedFile($parser_file[$parser])) {
                eval($data);
            } else {
                printf("Untrusted PHP code: <i>%s</i>",
                        htmlspecialchars($data));
            }
            break;
    }
}

function defaultHandler($parser, $data)
{
    if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {
        printf('<font color="#aa00aa">%s</font>',
                htmlspecialchars($data));
    } else {
        printf('<font size="-1">%s</font>',
                htmlspecialchars($data));
    }
}

function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,
                                  $publicId) {
    if ($systemId) {
        if (!list($parser, $fp) = new_xml_parser($systemId)) {
            printf("Could not open entity %s at %s\n", $openEntityNames,
                   $systemId);
            return false;
        }
        while ($data = fread($fp, 4096)) {
            if (!xml_parse($parser, $data, feof($fp))) {
                printf("XML error: %s at line %d while parsing entity %s\n",
                       xml_error_string(xml_get_error_code($parser)),
                       xml_get_current_line_number($parser), $openEntityNames);
                xml_parser_free($parser);
                return false;
            }
        }
        xml_parser_free($parser);
        return true;
    }
    return false;
}

function new_xml_parser($file)
{
    global $parser_file;

    $xml_parser = xml_parser_create();
    xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1);
    xml_set_element_handler($xml_parser, "startElement", "endElement");
    xml_set_character_data_handler($xml_parser, "characterData");
    xml_set_processing_instruction_handler($xml_parser, "PIHandler");
    xml_set_default_handler($xml_parser, "defaultHandler");
    xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");
    
    if (!($fp = @fopen($file, "r"))) {
        return false;
    }
    if (!is_array($parser_file)) {
        settype($parser_file, "array");
    }
    $parser_file[$xml_parser] = $file;
    return array($xml_parser, $fp);
}

if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
    die("could not open XML input");
}

echo "<pre>";
while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("XML error: %s at line %d\n",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }
}
echo "</pre>";
echo "parse complete\n";
xml_parser_free($xml_parser);

?>


a to jest plik xml
Kod
<?xml version="1.0" encoding="UTF-8"?>
<Storeys>
    
            
            <Storey Id="kd08tf605rb85u">Piwnica</Storey>
        
    
            
            <Storey Id="bad412q07arj3p">Przyziemie</Storey>
        
    
            
            <Storey Id="1if1tik05rb85u">Parter</Storey>
        
    
            
            <Storey Id="puvpps106gtmjv">Parter wersja II</Storey>
        
    
            
            <Storey Id="ookef4l07jmfc3">Półpiętro</Storey>
        
    
            
            <Storey Id="6dlstm705rb85u">Piętro I</Storey>
        
    
            
            <Storey Id="vh8jtpq05rb85u">Piętro II</Storey>
        
    
            
            <Storey Id="tglstte05rb85u">Poddasze</Storey>
        
    
            
            <Storey Id="psr01gk07aouq4">Poddasze do adaptacji</Storey>
        
    
            
            <Storey Id="m372hg906qseap">Poddasze II</Storey>
        
    
            
            <Storey Id="faj0tu005v66is">Poddasze wersja II</Storey>
        
    
            
            <Storey Id="0tnou1105rb85u">Strych</Storey>
        
    
            
            <Storey Id="vt5nvuo06qs0k4">Antresola</Storey>
        
    
</Storeys>


Czy ktoś wie czemu tak sie dzieje? Pewnie w złym miejscu wywoluje dodawanie do bazy?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.