Ich meine, es gäbe noch eine Möglichkeit, die ohne serverseitiges Processing auskommt. XML Data Islands oder so ähnlich. Spontan habe ich aber weder einen guten Link dazu noch weiß ich, ob das von Browsern problemlos unterstützt wird (da bin ich skeptisch) oder wie die Transformation XML->HTML durchgeführt wird (vermutlich über XSLT).
Wenn du schon bei XSLT bist, kannst du es aber auch von PHP erledigen lassen. Der Code, der zusätzlich zur XSL-Datei benötigt wird, ist minimal.
XSLT ist jedenfalls die meiner Meinung nach einfachste Möglichkeit, XML umzuformen, auch wenn es auf den ersten Blick nicht so wirkt.
Kleines Beispiel (bin leider selbst nicht sonderlich erfahren in XSLT):
[php]<?php
// Das müsste dann eben $xmlCode = file_get_contents(‚./pfad/zur/xmlDatei.xml‘);
// o. ä. lauten
$xmlCode = <<<EOT
<?xml version='1.0' encoding='UTF-8'?>
<Shot
sSound="AK74_Shot1"
>
<Trigger
sTriggerName="Shoot_Audio"
iLifeTime="500"
fSize="40.0"
bUpdatePos="false"
/>
</Shot>
<ShotEmpty
sSound="G36_Shot_Dry"
>
<Trigger
sTriggerName="Shoot_Audio"
iLifeTime="500"
fSize="2.0"
bUpdatePos="false"
/>
</ShotEmpty>
<Reload
sSound="AK74_ClipOut"
>
<Trigger
sTriggerName="Noise"
iLifeTime="500"
fSize="2.0"
bUpdatePos="false"
/>
</Reload>
<ReloadEnd
sSound="AK74_ClipIn"
>
<Trigger
sTriggerName="Noise"
iLifeTime="500"
fSize="2.0"
bUpdatePos="false"
/>
</ReloadEnd>
</Sounds>
<AnimOverride
fSpeed="1.0"
>
<RunTarget_Center
ssrc="Group1_Rifle_Run_Target_Center"
fblend="0.1"
/>
<RunTarget_Left
ssrc="Group1_Rifle_Run_Target_Left"
fblend="0.1"
/>
<RunTarget_Right
ssrc="Group1_Rifle_Run_Target_Right"
fblend="0.1"
/>
<RunTarget_Up
ssrc="Group1_Rifle_Run_Target_Up"
fblend="0.1"
/>
<RunTarget_Down
ssrc="Group1_Rifle_Run_Target_Down"
fblend="0.1"
/>
<RunTarget_UpLeft
ssrc="Group1_Rifle_Run_Target_UpLeft"
fblend="0.1"
/>
<RunTarget_UpRight
ssrc="Group1_Rifle_Run_Target_UpRight"
fblend="0.1"
/>
<RunTarget_DownLeft
ssrc="Group1_Rifle_Run_Target_DownLeft"
fblend="0.1"
/>
<RunTarget_DownRight
ssrc="Group1_Rifle_Run_Target_DownRight"
fblend="0.1"
/>
<SneakTarget_Center
ssrc="Group1_Rifle_Sneak_Target_Center"
fblend="0.1"
/>
<SneakTarget_Left
ssrc="Group1_Rifle_Sneak_Target_Left"
fblend="0.1"
/>
<SneakTarget_Right
ssrc="Group1_Rifle_Sneak_Target_Right"
fblend="0.1"
/>
<SneakTarget_Up
ssrc="Group1_Rifle_Sneak_Target_Up"
fblend="0.1"
/>
<SneakTarget_Down
ssrc="Group1_Rifle_Sneak_Target_Down"
fblend="0.1"
/>
<SneakTarget_UpLeft
ssrc="Group1_Rifle_Sneak_Target_UpLeft"
fblend="0.1"
/>
<SneakTarget_UpRight
ssrc="Group1_Rifle_Sneak_Target_UpRight"
fblend="0.1"
/>
<SneakTarget_DownLeft
ssrc="Group1_Rifle_Sneak_Target_DownLeft"
fblend="0.1"
/>
<SneakTarget_DownRight
ssrc="Group1_Rifle_Sneak_Target_DownRight"
fblend="0.1"
/>
<CrouchTarget_Center
ssrc="Group1_Rifle_Crouch_Target_Center"
fblend="0.1"
/>
<CrouchTarget_Left
ssrc="Group1_Rifle_Crouch_Target_Left"
fblend="0.1"
/>
<CrouchTarget_Right
ssrc="Group1_Rifle_Crouch_Target_Right"
fblend="0.1"
/>
<CrouchTarget_Up
ssrc="Group1_Rifle_Crouch_Target_Up"
fblend="0.1"
/>
<CrouchTarget_Down
ssrc="Group1_Rifle_Crouch_Target_Down"
fblend="0.1"
/>
<CrouchTarget_UpLeft
ssrc="Group1_Rifle_Crouch_Target_UpLeft"
fblend="0.1"
/>
<CrouchTarget_UpRight
ssrc="Group1_Rifle_Crouch_Target_UpRight"
fblend="0.1"
/>
<CrouchTarget_DownLeft
ssrc="Group1_Rifle_Crouch_Target_DownLeft"
fblend="0.1"
/>
<CrouchTarget_DownRight
ssrc="Group1_Rifle_Crouch_Target_DownRight"
fblend="0.1"
/>
<RunFwd
fHoldFP="0.1"
ssrc="Rifle_Run_Fwd_Group01"
fblend="0.1"
/>
<RunBack
fHoldFP="0.1"
ssrc="Rifle_Run_Back"
fblend="0.1"
/>
<RunLeft
fHoldFP="0.1"
ssrc="Rifle_Run_Left"
fblend="0.1"
/>
<RunRight
fHoldFP="0.1"
ssrc="Rifle_Run_Right"
fblend="0.1"
/>
<SneakFwd
fHoldFP="0.1"
ssrc="Rifle_Sneak_Fwd_Group01"
fblend="0.1"
/>
<RunFwdLeft
fHoldFP="0.1"
ssrc="Rifle_Run_FwdLeft"
fblend="0.1"
/>
<RunFwdRight
fHoldFP="0.1"
ssrc="Rifle_Run_FwdRight"
fblend="0.1"
/>
<RunBackLeft
fHoldFP="0.1"
ssrc="Rifle_Run_BackLeft"
fblend="0.1"
/>
<RunBackRight
fHoldFP="0.1"
ssrc="Rifle_Run_BackRight"
fblend="0.1"
/>
<RunIdle
ssrc="Rifle_Run_Idle_Group01"
fblend="0.1"
/>
<SneakIdle
ssrc="Rifle_Sneak_Idle_Group01"
fblend="0.1"
/>
<CrouchIdle
ssrc="Rifle_Crouch_Idle"
fblend="0.1"
/>
</AnimOverride>
EOT;
$xslCode = <<<EOT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version=„1.0“
xmlns:xsl=„http://www.w3.org/1999/XSL/Transform“
<xsl:template match="/">
<div>
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="Item">
<h1><xsl:value-of select="@sGameName" /></h1>
</xsl:template>
<xsl:template match="WeaponDesc">
<table border="1">
<tr>
<td>btracers</td>
<td><xsl:value-of select="@btracers" /></td>
</tr>
<tr>
<td>iAmmoPerMag</td>
<td><xsl:value-of select="@iAmmoPerMag" /></td>
</tr>
<tr>
<td>fReloadSpeed</td>
<td><xsl:value-of select="@fReloadSpeed" /></td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
EOT;
$xmldoc = new DOMDocument();
$xmldoc->preserveWhiteSpace = false;
$xmldoc->loadXML($xmlCode);
$xsldoc = new DOMDocument();
$xsldoc->preserveWhiteSpace = false;
$xsldoc->loadXML($xslCode);
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsldoc);
$tmp = $proc->transformToDoc($xmldoc);
$tmp->formatOutput = true;
echo $tmp->saveXML($tmp->documentElement);[/php]
Ausgabe:
[code]
AK-74 (AR)
btracers |
false |
iAmmoPerMag |
30 |
fReloadSpeed |
5.0 |
[/code]