WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Visa XML struktur (https://www.wn.se/forum/showthread.php?t=1043589)

mojitoo 2010-08-31 11:41

Visa XML struktur
 
Hej!

Jag undrar om ni kan hjälpa mig att visa xml strukturen på något sätt.

För att ni ska förstå mig bättre ska jag ge er ett exempel.

http://www.tizag.com/xmlTutorial/xmltree.php
Denna sida visar en väldigt enkel struktur av ett xml dokument.
Kod:

<inventory>
        <drink>
                <lemonade>
                        <price>$2.50</price>
                        <amount>20</amount>
                </lemonade>
                <pop>
                        <price>$1.50</price>
                        <amount>10</amount>
                </pop>
        </drink>

        <snack>
                <chips>
                        <price>$4.50</price>
                        <amount>60</amount>
                </chips>
        </snack>
        <snack>
                <chips>
                        <price>$4.50</price>
                        <amount>60</amount>
                </chips>
        </snack>
</inventory>

Det som jag behöver hjälp med att åstadkomma är att visa följande

Kod:

<inventory>
        <drink>
                <lemonade>
                        <price></price>
                        <amount></amount>
                </lemonade>
                <pop>
                        <price></price>
                        <amount></amount>
                </pop>
        </drink>

        <snack>
                <chips>
                        <price></price>
                        <amount></amount>
                </chips>
        </snack>
</inventory>

Jag vill alltså skriva ut xml strukturen på ett xml dokument och undvika dubbletter som ni ser. Går detta att åstadkomma på något sätt?

Jag använder mig av PHP och har med hjälp av simple xml och funktionen getName() (http://www.w3schools.com/php/php_ref_simplexml.asp) lyckats skriva ut allt på en lång lista. Men den tar inte hänsyn till dubbletter och inte heller hur långt in i dokumentet de ligger:

PHP-kod:

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.tizag.com/files/xml/lemonade.xml'); 
$list recurse_xml_tree($xml); 

ger mig följande:

Kod:

drink
lemonade
price
amount
pop
price
amount
snack
chips
price
amount
snack
chips
price
amount

Vilket tyvärr inte alls åstadkommer vad jag vill och hoppas därför på att någon av er kan hjälpa mig att skriva ut strukturen på xml dokumentet på något sätt. Den ska även skriva ut attributen exempelvis <chips name="pringles"></chips>
Såg att man kunde få ut attributen via attribute i simpleXML men tog inte med det i mitt exempel eftersom att jag ville att ni skulle förstå vad jag menade.

Är det möjligt att åstadkomma det jag vill åstadkomma?

Tack på förhand! :)

taz76 2010-08-31 18:44

för att inte skriva ut dubletter så får du loopa igenom simplexml-objektet och manuellt fixa det.. och sen skriva ut.

om du vill skriva ut i debuggningssyfte så kan jag rek;

echo '<pre>';var_dump($xml);echo '</pre>';

mojitoo 2010-08-31 19:25

Jag vill bara skriva ut trädet för att kunna se strukturen.
Exempelvis vad som finns i <chips>

ur din kod fick jag:
string(43) "http://www.tizag.com/files/xml/lemonade.xml"

Känns inte som att jag har fått rätt :/
Jag satte $xml = 'http://www.tizag.com/files/xml/lemonade.xml'

Eftersom att det bara verkar som att den tar längden på strängen $xml. Så hur var tanken att man skulle använda din kodsnutt?

Robert 2010-09-01 09:52

Du kan väl transformera XMLen med hjälp av XSLT. Läs mer om hur du gör en distinct här: http://blog.coryfoy.com/2007/09/gett...ata-in-a-node/

taz76 2010-09-02 14:12

Citat:

Ursprungligen postat av mojitoo (Inlägg 20367471)
Jag vill bara skriva ut trädet för att kunna se strukturen.
Exempelvis vad som finns i <chips>

ur din kod fick jag:
string(43) "http://www.tizag.com/files/xml/lemonade.xml"

Känns inte som att jag har fått rätt :/
Jag satte $xml = 'http://www.tizag.com/files/xml/lemonade.xml'

Eftersom att det bara verkar som att den tar längden på strängen $xml. Så hur var tanken att man skulle använda din kodsnutt?

Då skriver en ut en sträng - inte innehållet. Ladda det först med t.ex simplexml:

$xml = simplexml_load_file( 'http://www.tizag.com/files/xml/lemonade.xml' );
echo '<pre>';var_dump($xml);

Man kan göra filtreringar med xpath-uttryck eller nod-strukturen i simplexml om man ska se vad som finns i <chips> t.ex.


Alla tider är GMT +2. Klockan är nu 01:51.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson