PHP och XML

Tråden skapades och har fått 13 svar. Det senaste inlägget skrevs .
1

Hej,

Jag sitter och se över en möjlighet att skapa en webbmiljö i PHP och XML. XML håller i data (innehåll) som sedan ska presenteras snyggt via XSL/CSS. Jag förespråkar det sistnämnda.

Är det någon av er som har erfarenhet av likanade projekt. Jag tänker mig något likt Aston Villa FC - Results, fixtures, squad, statistics, photos, videos and news - Soccerway bortsett från dess innehåll.

Mvh

Tja, jag har gjort en jävla massa XML/XSL-arbete, inte primärt med inriktning på webb, men det är kanske sekundärt.

Vad är alternativen?

CSS lär vara inblandat även om du använder XSL, iom att det är webbaserat.

Om du är på jakt efter någonstans att börja kika så rekommenderas PHP's SimpleXML, som är (precis som namnet antyder) det lättaste sättet att läsa XML i PHP.

Tack för svar!
@irrelogical, Jag har läst på en del om SimpleXML - det verkar vara precis det jag eftersöker. Känslan är att jag kan stryka XSL helt och hållet? Känns inte helt dynamiskt och eftersom jag "skapar" dynamiken i PHP (XML-rapporterna kommer vara olika från projekt till projekt) så borde jag kunna koppla på hyffsat dynamisk CSS också. Det vill säga att jag endast behöver ändra i CSS vid nytt projekt (nytt uppdrag, nya grafiska profiler).

Behöver dock slå fast hur jag skapar interaktivitet. Tex. en startsida som visar innehållet hierarkiskt med sitemap-struktur? Från startsidan kan jag navigera till sub. Allt detta önskar jag att kunna lösa mer automatiskt än att behöva skapa länkar överallt och ingenstans

  • Oregistrerad
  • 2011-05-10 11:04

Vill du verkligen att browsern ska skicka XML och du ska styla det med XSL?
Eller vill du internt jobba med XML som du parsar om till HTML och skickar till webbläsaren?

Det är ju som sagt va två helt olika sätt.

Jag tycker inte det är så jobbigt att använda MVC internt, då får du en snygg separation automatiskt och slipper hantera XSL som faktiskt både är jobbigt och kräver en hel del av din browser.

@godpuppet: Precis, XSL behövs inte om du gör konverteringen mellan XML och HTML i PHP. Att skapa en sidstruktur automatiskt behöver inte vara så jättesvårt. Förutsatt att du har all XML som filer så är det bara att lägga dom i samma mapp och bygga menyn utifrån mappinnehållet.

Att jobba med MVC-struktur (med fördel mha något ramverk) som studiox föreslår är en väldigt bra idé, speciellt ur ett mer långsiktigt perspektiv.

@irrelogical Stort tack för information. Ser ett problem i att jag endast har en (stor) XML fil (rapport). Här behöver jag alltså slita ut noder för subpages och skapa egna XMLer av dem?
Läser på om MVC, hittar dock inget om studiox, länk?

studiox är alltså personen som skrev inlägget ovanför mitt.

Ett bra och enkelt sätt att komma igång med MVC är att basera det på ett befintligt ramverk, t ex CodeIgniter som har bra dokumentation. Du måste inte skapa separata XML-filer för respektive undersida, det går bra att använda xpath för att få ut specifika bitar av en större XML-fil.

  • Oregistrerad
  • 2011-05-10 15:51

eller cakephp

Jag tror det är olyckligt att säga att man ska undvika den ena eller andra tekniken. XSL är bizarrt kraftfullt och kan göra grejer som är närapå tortyr i vilket scriptingspråk som helst –.och omvänt! Varför inte försöka fundera på var respektive teknik gör sig bäst?

Tänk också på att XSL inte bara kan användas klientside, utan med fördel också serverside, när det t.ex. gäller att bryta data, skapa värdeobjekt, json, etc. etc.

När har någon sagt att man ska undvika XSL? Jag har uttalat mig om att lösa det mha PHP, iom att det är vad jag i det här sammanhanget kan tillräckligt bra för att kunna uttala mig och peka i rätt riktning.

Tack för mycket bra feedback. Jag har dock dykt på ett litet probelm. Min XML är rätt så omfattande och de olika delarna där jag vill plocka ut "Titel" är definierad med en GUID. Se exempel nedan:

<GUID>e799cc83-0d4e-11de-2663-ef7a9bc6f18d</GUID>
			<AttrDef AttrDef.Type="AT_NAME">
				<AttrValue LocaleId="&LocaleId.USen;">
					<StyledElement>
						<Paragraph Alignment="UNDEFINED" Indent="0"/>
							<StyledElement>
								<PlainText TextValue="Den här texten vill jag anropa"/>
							</StyledElement>
					</StyledElement>
				</AttrValue>
			</AttrDef>
			<AttrDef AttrDef.Type="AT_LUSER">

Hur går jag till väga i min SimpleXML?

$xml->GUID[e799cc83-0d4e-11de-2663-ef7a9bc6f18d];

Använd Xpath med pathen [nocode]parent_element[GUID="e799cc83-0d4e-11de-2663-ef7a9bc6f18d"][/nocode], där du byter ut parent_element mot det elementet som innehåller GUID'et. Sen får du gräva dig vidare i hierarkin, antingen genom att göra Xpath-uttrycket mer specifikt eller genom att använda objekt-hierarkin i PHP.

Fick för mig att använda Xpath. Men dess output är ju en array, vilket inte är det jag eftersöker?.
Är detta PHP basics som jag bränner mig på?

<?php
$xml = simplexml_load_file("test.xml");

$result = $xml->xpath("/AML/Group[1]/ObjDef[53]/AttrDef[1]/AttrValue[1]/StyledElement[1]/StyledElement[1]/PlainText[1]");

print_r($result);

?>
1
Bevaka tråden