# xml datei auslesen?



## webpagemaster (29. Juni 2006)

Wie kann ich eine xml Datei mittels php auslesen und die Werte dann in eine Datenbank speichern?

Die Datei die ich auslesen möchte ähnelt dem, das im Quelltext unter folgendem Link ausgegeben wird.

karriere.at - Stellenangebote


----------



## StefanR (29. Juni 2006)

Hmm nen paar mehr Infos bräuchten wir schon von dir! Welche PHP Version, dein PHP- Stand. usw. macht ja keinen Sinn dir jetzt hier was zu erklären, was du nachher gar nicht gebrauchen kannst, weil du evtl. nicht die PHP Version hast oder evtl nicht damit um kannst, da du in Sachen PHP noch nicht so weit bist.

Gruß Stefan


----------



## webpagemaster (2. Juli 2006)

Die php Version spielt keine rolle,
die kann ich mir am server selbst installieren....

(momentan version 5)


----------



## forsterm (2. Juli 2006)

Hallo,
wie wäre es mit [phpf]simplyxml[/phpf]?

mfg
forsterm


----------



## CIX88 (2. Juli 2006)

oder domxml
einfaches Beispiel:
XML parsen: heise.de


----------



## webpagemaster (4. Juli 2006)

also das letzte Beispiel mit DOMXML will nicht so recht.
schade, der code sieht so simpel aus....

kann das daran liegen, das du eine *.rdf Datei zum Auslesen anhegeben hast, und ich eine *.php?

ich habe einfach meinen link reinkopiert...


```
<?
error_reporting(E_ALL);

    $file = 'http://www.karriere.at/home/jobfeed.php';

    // DOM Object vom XML-File erstellen
    $dom = domxml_open_file( $file );

    // das Wurzelelement zurück geben
    $root = $dom->document_element();

    // Element-Name als Array
    $title_array = $root->get_elements_by_tagname( 'title' );
    $link_array = $root->get_elements_by_tagname( 'link' );

    // Anzahl vom Array
    $anz = count($title_array);

    // Array durchlaufen
    for ( $i = 1; $i < $anz; $i++ ) {

        // content ausgeben
        echo '<p>';
        echo utf8_decode($title_array[$i]->get_content()).' <br>';
        echo utf8_decode($link_array[$i]->get_content()).' <br>';
        echo '</p>';
    }

?>
```


----------



## RS9999 (4. Juli 2006)

Teste doch einmal mit SimpleXML.


```
<?php 
    //Die SimpleXML Extension setzt PHP 5 voraus.

    error_reporting(E_ALL);
    $max = '10'; // Einträge pro Seite einschrängen
    $file = "http://www.karriere.at/home/jobfeed.php"; 
    
    if(!$xml = simplexml_load_file($file)){
    die("XML-Dokument kann nicht geparst werden!");
    }
    
    for($i=0;$i < $max ; $i++){
        $title = $xml->channel->item[$i]->title;
        $link = $xml->channel->item[$i]->link;
        $description = $xml->channel->item[$i]->description;

    echo '<b>'.utf8_decode($title).'</b><br/><br/>';
    echo utf8_decode($description).'<br/><br/>';
echo '<a class="menue" href="'.utf8_decode($link).'" target="_blank">[mehr]</a><br/><br/><hr></hr>'; 
    }     

?>
```


----------



## webpagemaster (16. August 2006)

kann ich beim simpleXML auch irgendwie herausbekommen, wieviele einträge das xml dokument hat?


----------



## RS9999 (16. August 2006)

In meinem Vorschlag würde das so ausehen:


```
count($xml->channel->item);
```


----------



## Picl (30. August 2006)

Hi,

habe grade mal versucht das Modell auf folgende Struktur anzuwenden:


```
<Products>
<Titeldaten>
	<Titelnummer>1</Titelnummer>
	<isbn>0721-1902</isbn>
	<ean>123</ean>
	<Titelbezeichnung1>db 1/2004 Vernetzt denken</Titelbezeichnung1>
	<publishing>
		<Erscheinungsjahr>2004</Erscheinungsjahr>
		<Publisher>yxz</Publisher>
	</publishing>
</Titeldaten>
<Titeldaten>
	<Titelnummer>2</Titelnummer>
	<isbn>0721-1904</isbn>
	<ean>1235</ean>
	<Titelbezeichnung1>db 1/2005 Vernetzter denken</Titelbezeichnung1>
	<publishing>
		<Erscheinungsjahr>2005</Erscheinungsjahr>
		<Publisher>xyz</Publisher>
	</publishing>
</Titeldaten>
</Products>
```

Deinen Code habe ich wie folgt geändert (habe nur ein paar der Daten versucht auszugeben wie du siehst):

```
<?php 
    //Die SimpleXML Extension setzt PHP 5 voraus.

    error_reporting(E_ALL);
    $max = '100'; // Einträge pro Seite einschränken
    $file = "Datensatz2.xml"; 
    
    if(!$xml = simplexml_load_file($file)){
    die("XML-Dokument kann nicht geparst werden!");
    }
    
    for($i=0;$i < $max ; $i++){
        $Titelnummer = $xml->channel->item[$i]->Titelnummer;
        $isbn = $xml->channel->item[$i]->isbn;
        $Titelbezeichnung = $xml->channel->item[$i]->Titelbezeichnung;
        $Erscheinungsjahr = $xml->channel->item[$i]->Erscheinungsjahr;

    echo '<b>'.utf8_decode($Titelbezeichnung).'</b><br/>';
    echo utf8_decode($Titelnummer).'<br/>';
		echo utf8_decode($isbn).'<br/>; 
		echo utf8_decode($Erscheinungsjahr).'<br/>; 
    }     
?>
```

Leider kommt nur folgender Fehler:

```
Notice: Trying to get property of non-object in C:\Programme\xampp\htdocs\xml2sql\xml2db.php on line 13

Notice: Trying to get property of non-object in C:\Programme\xampp\htdocs\xml2sql\xml2db.php on line 14

Notice: Trying to get property of non-object in C:\Programme\xampp\htdocs\xml2sql\xml2db.php on line 15

Notice: Trying to get property of non-object in C:\Programme\xampp\htdocs\xml2sql\xml2db.php on line 16
```

Was muss ich hier ändern dass es funktioniert?
(Aktuellste XAMPP 1.5.3a mit PHP 5 ist installiert)


Greetz,

Picl


----------



## Sir Robin (30. August 2006)

Hallo,

du musst dir SimpleXML wie ein assoziatives Array im Zugriff vorstellen. Du hast also nicht "channel" und "Item" bei dir, sondern "Titelbezeichnung" etc.

auf die ISBN des ersten Titels greifst du also folgendermaßen zu:


```
<?php

// ... einlesen geschah vorher
echo $xml->Titeldaten[0]->isbn;

?>
```


----------



## Picl (30. August 2006)

Ah ok, vielen Dank! Hätte mir die XML-Ausgabe von karriere.at besser ansehen sollen, dann wäre es mir wohl aufgefallen  Aber irgendwie klangen channel und item durchaus plausibel.

Falls es jemand hilft, hier mein Code:


```
<?php 
    //Die SimpleXML Extension setzt PHP 5 voraus.

    error_reporting(E_ALL);
    $max = '2'; // Einträge pro Seite einschränken
    // Anm.: Wenn max auf mehr steht als Einträge in der XML vorhanden kommt Fehlermeldung!
    $file = "Datensatz2.xml"; 
    
    if(!$xml = simplexml_load_file($file)){
    die("XML-Dokument kann nicht geparst werden!");
    }
    
    for($i=0;$i < $max ; $i++){
        $Titelnummer = $xml->Titeldaten[$i]->Titelnummer;
        $isbn = $xml->Titeldaten[$i]->isbn;
        $Titelbezeichnung = $xml->Titeldaten[$i]->Titelbezeichnung1;
        $Erscheinungsjahr = $xml->Titeldaten[$i]->publishing->Erscheinungsjahr;

    echo '<b>'.utf8_decode($Titelbezeichnung).'</b><br/>';
    echo utf8_decode($Titelnummer).'<br/>';
		echo utf8_decode($isbn).'<br/>'; 
		echo utf8_decode($Erscheinungsjahr).'<br/>'; 
    } 
?>
```

Greetz,

Picl


----------

