webForumDet fria alternativet

SimpleXML få ut alla nodnamn

PHPur PHP

2 svar · 603 visningar · startad av gorgonsola

Medlem sedan juli 20103 inlägg
Frågan#1

Hej!

Jag behöver hjälp med att få ut alla nodnamn från ett xml dokument, jag har sökt runt på google men inte lyckats hitta det jag är ute efter.

Låt oss kolla på DNs rss:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<title>DN.se - Nyheter - Senaste nytt</title>
<link>http://www.dn.se/m/rss/senaste-nytt\</link>
<description>DN.se - Nyheter - Senaste nytt</description>
<item>
<title>Man skjuten i armen i Eskilstuna</title>
<link>http://www.dn.se/nyheter/sverige/man-skjuten-i-armen-i-eskilstuna-1.1159596\</link>
<description>En man sköts i armen utanför en pizzeria i stadsdelen Årby i Eskilstuna strax före 19-tiden på onsdagskvällen.</description>
<category domain="http://dn.se/department">Sverige</category>
<pubDate>Wed, 25 Aug 2010 18:20:35 GMT</pubDate>
<guid>http://www.dn.se/nyheter/sverige/man-skjuten-i-armen-i-eskilstuna-1.1159596\</guid>
<dc:creator>TT</dc:creator>
<dc:date>2010-08-25T18:20:35Z</dc:date>
</item>

Här skulle jag vilja få ut
<title>
<item>
<title>
osv, alla namn och dess undernamn men jag vet inte alls hur jag ska gå tillväga. Jag hittade följande http://cert.w3schools.com/php/func_simplexml_getname.asp
men tyvärr så ger den mig bara rss och channel och jag förstår inte varför.

Så hjälp mig gärna att få detta att fungera. :)

Medlem sedan mars 20007 896 inlägg
#2

Du måste ju på något sätt arbeta med rekursion för att få ut allt, eftersom strukturen verkar vara okänd. Koden nedan är otestad och tar inte hänsyn till dubletter.

function recurse_xml_tree($node) {
    if (!$node || sizeof($node->children()) < 1)
        return array();

    $result = array();
    foreach ($node->children() as $current) {
        array_push($result, $current->getName());
        $result = array_merge(
                        $result,
                        recurse_xml_tree($current)
            );
    }

    return $result;
}

$xml  = simplexml_load_file('http://www.dn.se/m/rss/toppnyheter');
$list = recurse_xml_tree($xml);

Med reservation för tankefel så här på kvällen.

Medlem sedan juli 20103 inlägg
#3

Tack så mycket. Den skriver mycket riktigt ut all information.
Men jag har suttit och testat och försökt lyckats samla all information för en "familj" i en lista / array.

En snabb utskrift från det jag får ut via dn:
channel
title
link
description
item
title
link
description
pubDate
guid
item
title
link
description
pubDate
guid
item

Jag skulle vilja att det sparades så att man visste vad som låg i vad om du förstår mig.
För som det är nu kan jag inte riktigt använda mig av detta.
jag skulle vilja ha
i channel ligger title, link, description och item
MEN i item ligger sedan även title, link description, pubDate och guid

Har du något förslag på hur man skulle kunna bära sig åt för att lyckas med detta?
Jag antar att man måste spara det i olika arrayer på något sätt.

För att du ska förstå lite bättre vad jag är ute efter så ska jag även försöka förklara vad jag vill åstadkomma.

Man ska kunna lägga till adressen till en rss / xml fil:
Som sedan läser in dessa värden.

Sen ska jag kunna välja channel + title för att skriva ut titeln i channel
Jag ska även kunna välja channel + item + title så ska den skriva ut titeln för item istället.

Men det jag behöver hjälp med är alltså att spara dem och skriva ut dem så att man ser strukturen av xml dokumentet på något sätt. Hoppas att du och ni andra förstår vad jag behöver hjälp med.

135 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)