Kom ihåg mig?
Home Menu

Menu


Visa XML struktur

Ämnesverktyg Visningsalternativ
Oläst 2010-08-31, 11:41 #1
mojitoo mojitoo är inte uppkopplad
Medlem
 
Reg.datum: Jun 2010
Inlägg: 125
mojitoo mojitoo är inte uppkopplad
Medlem
 
Reg.datum: Jun 2010
Inlägg: 125
Standard 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!
mojitoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-31, 18:44 #2
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
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>';
taz76 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-08-31, 19:25 #3
mojitoo mojitoo är inte uppkopplad
Medlem
 
Reg.datum: Jun 2010
Inlägg: 125
mojitoo mojitoo är inte uppkopplad
Medlem
 
Reg.datum: Jun 2010
Inlägg: 125
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?
mojitoo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-09-01, 09:52 #4
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
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/
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-09-02, 14:12 #5
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
taz76 taz76 är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2008
Inlägg: 388
Citat:
Ursprungligen postat av mojitoo Visa inlägg
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.

Senast redigerad av taz76 den 2010-09-02 klockan 14:14
taz76 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 06:50.

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