Unterschidliche XML in PHP ausgeben ?

drcomputer

Grünschnabel
Hallo zusammen


ich hab da ein kleines Problem und ich bin nirgend fündig geworden um es zu beheben

nun mal zur Beschreibung
ich hab eine XML die so ausschaut:

Code:
</Manifest>
  <Prop pgd="ad8a565b" guid="1652450520" mesh="wall" id="2f2f2d72">
    <Position x="-8781.927" y="-17.6355" z="5323.18" />
    <rotation x="1.570796" y="0" z="0" />
    <Scale x="2.43" y="3.03001" z="1" />
    <Properties state="" flags="258" />
    <Scripts>
      <Script name="WebLoadImage">
        <Param ordinal="0" value="http://....." />
        <Param ordinal="1" value="1" />
      </Script>
    </Scripts>
  </Prop>
  <Prop pgd="1e0ecac1" guid="14768724" mesh="plant_large" id="23db60a0">
    <Position x="9287.532" y="0" z="529.9567" />
    <rotation x="0" y="1.570796" z="0" />
    <Scale x="1.5" y="1.5" z="1.5" />
    <Properties state="" flags="770" />
  </Prop>
  <Prop pgd="34ad6fec" guid="777174330" mesh="sign" id="714361e8">
    <Position x="7993.813" y="6133.697" z="-6892.015" />
    <rotation x="0" y="4.712389" z="0" />
    <Scale x="1" y="0.5" z="1" />
    <Properties state="" flags="770" />
    <Scripts>
      <Script name="AddFlashControl">
        <Param ordinal="0" value="http://" />
        <Param ordinal="1" value="1" />
        <Param ordinal="2" value="1" />
        <Param ordinal="3" value="1" />
        <Param ordinal="4" value="1" />
        <Param ordinal="5" value="15" />
        <Param ordinal="6" value="0" />
        <Param ordinal="7" value="0" />
        <Param ordinal="8" value="1" />
        <Param ordinal="9" value="37" />
        <Param ordinal="10" value="100" />
        <Param ordinal="12" value="0" />
        <Param ordinal="13" value="0" />
        <Param ordinal="14" value="0" />
        <Param ordinal="15" value="0" />
        <Param ordinal="16" value="512" />
        <Param ordinal="17" value="512" />
        <Param ordinal="18" value="0" />
        <Param ordinal="19" value="1" />
        <Param ordinal="20" value="1" />
        <Param ordinal="21" value="1" />
        <Param ordinal="22" value="1" />
        <Param ordinal="23" value="0" />
      </Script>
    </Scripts>
  </Prop>
  <Prop pgd="f939b7cb" guid="186532937" mesh="flowervase" id="49b94650">
    <Position x="1760.631" y="-25.00041" z="-400.8582" />
    <rotation x="0" y="0" z="0" />
    <Scale x="1" y="1" z="1" />
    <Properties state="" flags="770" />
  </Prop>
  <Prop pgd="42caf59e" guid="931898951" mesh="sign_1" id="714361e8">
    <Position x="7932.554" y="3902" z="5784.475" />
    <rotation x="0" y="4.712389" z="0" />
    <Scale x="1.2" y="1.72" z="1" />
    <Properties state="" flags="4195082" />
    <Scripts>
      <Script name="WebLoadImage">
        <Param ordinal="0" value="http://.jpg" />
        <Param ordinal="1" value="1" />
      </Script>
      <Script name="MoveToWWWUrl">
        <Param ordinal="0" value="WWW." />
      </Script>
    </Scripts>
  </Prop>
</Manifest>

und das wiederholt sich unterschiedlich und das sind zum teil 6000 - 10000 unt mehr oder auch weniger
nun muss ich aber das so auslesen lassen das man
einmal sehen kann wie viel Skripte in der XML sind z.b. WebLoadImage, AddFlashControl, ... usw...

nur weis ich nicht wie man das alles ausgeben kann das das dann aufgelistet wird gezählt und welches Skript das ist bzw. bei WebLoadImage der html link ist halt ziemlich komplex das teil kann mir da jemand helfen ? oder mich an anzupesen auf eine Lösung dafür
 
Hallo,

wenn das XML valide und wohl-geformt ist (was deines nicht ist), kann man DOM/XPath verwenden:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<Manifest>
	<Prop pgd="ad8a565b" guid="1652450520" mesh="wall" id="2f2f2d72">
		<Position x="-8781.927" y="-17.6355" z="5323.18" />
		<rotation x="1.570796" y="0" z="0" />
		<Scale x="2.43" y="3.03001" z="1" />
		<Properties state="" flags="258" />
		<Scripts>
			<Script name="WebLoadImage">
				<Param ordinal="0" value="http://....." />
				<Param ordinal="1" value="1" />
			</Script>
		</Scripts>
	</Prop>
	<Prop pgd="1e0ecac1" guid="14768724" mesh="plant_large" id="23db60a0">
		<Position x="9287.532" y="0" z="529.9567" />
		<rotation x="0" y="1.570796" z="0" />
		<Scale x="1.5" y="1.5" z="1.5" />
		<Properties state="" flags="770" />
	</Prop>
	<Prop pgd="34ad6fec" guid="777174330" mesh="sign" id="714361e8">
		<Position x="7993.813" y="6133.697" z="-6892.015" />
		<rotation x="0" y="4.712389" z="0" />
		<Scale x="1" y="0.5" z="1" />
		<Properties state="" flags="770" />
		<Scripts>
			<Script name="AddFlashControl">
				<Param ordinal="0" value="http://" />
				<Param ordinal="1" value="1" />
				<Param ordinal="2" value="1" />
				<Param ordinal="3" value="1" />
				<Param ordinal="4" value="1" />
				<Param ordinal="5" value="15" />
				<Param ordinal="6" value="0" />
				<Param ordinal="7" value="0" />
				<Param ordinal="8" value="1" />
				<Param ordinal="9" value="37" />
				<Param ordinal="10" value="100" />
				<Param ordinal="12" value="0" />
				<Param ordinal="13" value="0" />
				<Param ordinal="14" value="0" />
				<Param ordinal="15" value="0" />
				<Param ordinal="16" value="512" />
				<Param ordinal="17" value="512" />
				<Param ordinal="18" value="0" />
				<Param ordinal="19" value="1" />
				<Param ordinal="20" value="1" />
				<Param ordinal="21" value="1" />
				<Param ordinal="22" value="1" />
				<Param ordinal="23" value="0" />
			</Script>
		</Scripts>
	</Prop>
	<Prop pgd="f939b7cb" guid="186532937" mesh="flowervase" id="49b94650">
		<Position x="1760.631" y="-25.00041" z="-400.8582" />
		<rotation x="0" y="0" z="0" />
		<Scale x="1" y="1" z="1" />
		<Properties state="" flags="770" />
	</Prop>
	<Prop pgd="42caf59e" guid="931898951" mesh="sign_1" id="714361e8">
		<Position x="7932.554" y="3902" z="5784.475" />
		<rotation x="0" y="4.712389" z="0" />
		<Scale x="1.2" y="1.72" z="1" />
		<Properties state="" flags="4195082" />
		<Scripts>
			<Script name="WebLoadImage">
				<Param ordinal="0" value="http://.jpg" />
				<Param ordinal="1" value="1" />
			</Script>
			<Script name="MoveToWWWUrl">
				<Param ordinal="0" value="WWW." />
			</Script>
		</Scripts>
	</Prop>
</Manifest>

PHP:
<?php
$dom = new DOMDocument();
$dom->load('test3.xml');

$xpath = new DOMXPath($dom);

$childs = $xpath->query('/Manifest/Prop/Scripts/Script/@name');

$scriptElements = array();

foreach ($childs as $child)
{
	$scriptElements[] = $child->value;
}

//var_dump($scriptElemenmts);
printf("You have %d script elements\n", count($scriptElements));
foreach($scriptElements as $element)
{
	printf("Element: %s\n", $element); 
}
 
hallo saftmeister

Danke für deinen beitrag klapt soweit nun versuche ich es weiter zu erstellen mit denn auslesen und berechnen ist aber anderes Thema aber wenn ich nicht weiter komme dann melde ich mich wieder falls ich weiter komme stelle ich denn gesamt code hier rein für andere user

=EDIT==================

kann man das auch irgendwie in einer Tabelle wiedergeben
aber die werte müssen halt immer alle nur in einer Tabelle erstellt sein ich hab mal denn code noch mal eingefügt mit denn zusätzen
Ich hab es mit div versucht nur das macht er auch nicht :-(


PHP:
<?php
$dom = new DOMDocument();
$dom->load('test.xml');
 
$xpath = new DOMXPath($dom);
 
$childs = $xpath->query('/Manifest/Prop/Scripts/Script/@name');
$childs0 = $xpath->query('/Manifest/Prop/@mesh');
$childs1 = $xpath->query('/Manifest/Prop/Scripts/Script/Param/@value');

$scriptElements = array();
$scriptElements0 = array();
$scriptElements1 = array();


foreach ($childs as $child)
{
    $scriptElements[] = $child->value;
}
foreach ($childs0 as $child0)
{
    $scriptElements0[] = $child0->value;
}
foreach ($childs1 as $child1)
{
    $scriptElements1[] = $child1->value;
}
//var_dump($scriptElemenmts);
printf("You have %d script elements\n<br>", count($scriptElements));
printf("Verbaute Gegenstände %d \n<br>", count($scriptElements0));


foreach($scriptElements as $element)   //Script
{
    	printf("<div class=\"left\">%s</div>", $element ); 
}
foreach($scriptElements1 as $element1)  //Link
{ 
	printf("<div class=\"middle\">%s</div>", $element1 ); 
}
foreach($scriptElements0 as $element0)  //Datengröße aus URL (noch nicht vorhanden)
{ 
	printf("<div class=\"right\">123</div>", $element0 ); 
}

?>
 
Zuletzt bearbeitet:
Hallo,

erst mal einen Rüffel ;-) Bitte halte dich an die Nettiquette (insb. Punkt 15). Dann kann man deine Posts besser lesen.

Wenn alle Childs die selbe Anzahl an Elementen haben, brauchst du nur einmal durch einen Array loopen und kannst die anderen beiden über Index ansprechen:

PHP:
<?php
/* ....
 ...
 */
printf("Verbaute Gegenstände %d \n<br>", count($scriptElements0));


print("<table>\n";
$counter = 0;
foreach($scriptElements as $element)   //Script
{
        printf("<tr><td>%s</td><td>%s</td><td>%s</td>\n", $element, $element1[$counter], $element0[$counter]);
        $counter++;
}
print("</table>\n");
 
Zurück