Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 02. Dezember 2020 21:35
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
[GELÖST] XML-Datei ausgeben
Hallo Forum,
hab gerade einen Knoten im Kopf - will eine XML-Datei einlesen und ausgeben.
Ersteres funktioniert, nur hab ich Schwierigkeiten auf das XML Objekt zuzugreifen. Ist garantiert ganz banal, nur ich komm eben nicht drauf.
Die XML Datei sieht so aus
<?xml version="1.0" encoding="UTF-8"?>
<gcodes>
<gcode>
<id>G0-G1</id>
<kb_en>Linear Move</kb_en>
<kb_de></kb_de>
<b_en>Add a straight line movement to the planner</b_en>
<b_de></b_de>
</gcode>
</gcodes>
und mein Template so
{if file_exists('gcodes.xml')}
{$xml = simplexml_load_file('gcodes.xml')}
{/if}
{if !empty($xml)}
{foreach $xml->gcodes->gcode as $gcode}
<h4>{$gcode->id} - {$gcode->kb_en}</h4>
<p>{$gcode->b_en}</p>
{if $gcode->b_de != ''}<p>{$gcode->b_de}</p>{/if}
<hr>
{/foreach}
{/if}
Mit 'nem RSS Feed geht es problemlos durch, mit meiner XML aber nicht . Es wird einfach gar nichts ausgegeben. Die XML ist "wellformed". Läuft auf PHP 7.4
Irgend eine Idee?
Offline
#2 02. Dezember 2020 22:10
- nockenfell
- Moderator
- Ort: Lenzburg, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.930
- Webseite
Re: [GELÖST] XML-Datei ausgeben
{if !empty($xml)}
{foreach from=$xml->gcode item='gcode'}
<h4>{$gcode->id} - {$gcode->kb_en}</h4>
<p>{$gcode->b_en}</p>
{if $gcode->b_de != ''}<p>{$gcode->b_de}</p>{/if}
<hr>
{/foreach}
{/if}
Den Root-Node musst du nicht ansprechen.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#3 03. Dezember 2020 15:20
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] XML-Datei ausgeben
Den Root-Node musst du nicht ansprechen.
Genau das war es ... funktioniert!
Danke dir!!!
Die Frage ist dann aber für mich. warum kann ich damit
[== Smarty ==]
{if !empty($xml)}
{$cnt = 0}
{foreach $xml->channel->item as $item}
<h4>Name: <a href="{$item->link}">{$item->title}</a></h4>
<p>{$item->author} / {$item->pubDate|date_format:'%e %B %Y'}</p>
<p>Beschreibung: {$item->description}
<p><a href="{$item->guid}">Zum Thingiverse Objekt »</a></p><hr>
{$cnt = $cnt + 1}
{*if $cnt == 2}{break}{/if*}
{/foreach}
{/if}
nen RSS Feed laden, der nicht viel anders aufgebaut ist ?
Offline
#4 03. Dezember 2020 19:10
- nockenfell
- Moderator
- Ort: Lenzburg, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.930
- Webseite
Re: [GELÖST] XML-Datei ausgeben
Gute Frage. Ich habe mich bei XML sehr viel mit DomDocument und DomXPath auseinander gesetzt, jedoch nicht mit simplexml. Möglicherweise kommt es auch die Struktur des XMLs an. Ein RSS Feed hat weitere Elemente neben den Items auf der gleichen Ebene.
Diese Erklärung ist zwar nicht wirklich logisch. Müsste das auch weiter testen.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#5 03. Dezember 2020 22:18
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] XML-Datei ausgeben
Gute Frage. Ich habe mich bei XML sehr viel mit DomDocument und DomXPath auseinander gesetzt,
Da hätt ich gleich mal dazu die Frage - ich hab wie oben beschrieben einen RSS-Feed. {$item->description} sieht von der Struktur her immer so aus
<![CDATA[<div style="margin: 5px;"><a href="https://www.thingiverse.com/thing:4673852"><img src="https://cdn.thingiverse.com/assets/04/d1/fb/25/4d/Chat_Low_Poly_by_yiixpe.jpg" class="preview_large" style="width: 240px; height: 180px"></a><br/></div><div><div><p>Mon imprimante: Ender 3 Pro</p>
.
.
.
Ich möchte jetzt diese URL
<img src="https://cdn.thingiverse.com/assets/04/d … yiixpe.jpg" class="preview_large" style="width: 240px; height: 180px">
(also nur 1 Element) auslesen.
Ich weiß, dass das via DOM über getElementsByTagName("img") und getAttribute('src') funktioniert.
Aber wie wende ich das sinnvoll nur auf {$item->description} an?
Möglicherweise kommt es auch die Struktur des XMLs an. Ein RSS Feed hat weitere Elemente neben den Items auf der gleichen Ebene.
Das war auch mein Gedanke. Hab's mangels Zeit aber nicht weiter getestet.
Offline
#6 04. Dezember 2020 12:50
- nockenfell
- Moderator
- Ort: Lenzburg, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.930
- Webseite
Re: [GELÖST] XML-Datei ausgeben
Der Inhalt der Description ist mit CDATA maskiert, so dass innerhalb vom XML eine HTML Struktur eingefügt werden kann. Damit ist dieser Teil über simplexml / DomDocument / DomXPath nicht ansprechbar, resp. wird nicht als Teil der XML-Struktur interpretiert sondern als Inhalt. Ich nehme an, dass du mit simplexml für die Description einfach ein
<div style="margin: 5px;"><a href="https://www.thingiverse.com/thing:4673852"><img....
ohne das CDATA zurück erhältst. So ist es zumindest im DomDocument. Du kannst natürlich diesen Teil auch wieder als XML interpretieren. Dazu muss aus dem HTML ein DomDocument erstellt werden. Zu simplexml habe ich folgendes gefunden:
https://stackoverflow.com/questions/663 … rough-html
$html = file_get_contents('http://example.com/');
$doc = new DOMDocument();
$doc->loadHTML($html);
$sxml = simplexml_import_dom($doc);
Ich hätte das wohl rein über DomDocument gelöst:
$html = file_get_contents('http://example.com/');
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DomXPath($doc);
$link = $xpath->query('//img/@src')->item(0);
Den XPath habe ich nicht geprüft, nur aus dem Kopf geschrieben. Müsste so gehen.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
Seiten: 1