#1 26. März 2008 XML bestimmtes unterattribut ausgeben Hallo, das ist mein XML File: Code: <characterInfo> <character name="TESTNAME"> </characterInfo> <characterTab> <items> <item durability="60" slot="0"/> <item durability="0" slot="1"/> <item durability="60" slot="21"/> <item durability="99" slot="4"/> <item durability="30" slot="5"/> </items> </characterTab> So, nun will ich mir zum Beispiel das Item mit der Slot nummer 21 haben. Das ist mein PHP Code: PHP: $char = simplexml_load_file ( "XML DATEI" ); //Name ausgeben echo $char -> characterInfo -> character [ 'name' ]; //Hier soll Slot 21 hin echo $char -> characterTab -> items -> item ??????????? so, nun wie gehts weiter? hab was von Xpath gelesen, aber das sieht sehr umständlich aus. Gibt es da nicht sowas wie SQL ^^ Select Item from........ =) Gruß + Multi-Zitat Zitieren
#2 26. März 2008 AW: XML bestimmtes unterattribut ausgeben ich denke du musst wohl oder übel mit foreach() deine items durchgehen und gucken, welches davon das entsprechende attribut hat zur performance solltest du bei erfolg mit break; die schleife abbrechen + Multi-Zitat Zitieren
#3 26. März 2008 AW: XML bestimmtes unterattribut ausgeben ok, das wäre auch eine möglichkeit. ich werds mal probieren. Für weitere möglichkeiten bin ich immer offen + Multi-Zitat Zitieren
#4 26. März 2008 AW: XML bestimmtes unterattribut ausgeben PHP: $dom = new DOMDocument ( '1.0' , 'ISO-8859-1' ); $dom -> loadXML ( 'der_inhalt_deiner_xml_datei' ); $items = $dom -> getElementsByTagName ( 'items' ); $neededItem = null ;for( $i = 0 , $o = count ( $items -> item ( 0 )-> childNodes ); $i < $o ; $i ++) { $curItem = $items -> item ( 0 )-> childNodes [ $i ]; if( false !== ( $curItem -> getAttributeNode ( 'slot' ) == 21 )) { $neededItem = $curItem ; break; }} if( $neededItem !== null ) print 'node gefunden!' ;else print 'node mit attribut "slot=21" nicht vorhanden!' ; wenn ich mich ned irre sollte das klappen + Multi-Zitat Zitieren
#5 26. März 2008 AW: XML bestimmtes unterattribut ausgeben Nabend, dabei könnte dir xPath helfen, einfach mal hier schauen XPath – Wikipedia und dir z.B. dazu mal die vorgeschlagenen Methoden auf PHP: Manual Quick Reference nachrecherchieren. + Multi-Zitat Zitieren
#6 26. März 2008 AW: XML bestimmtes unterattribut ausgeben Vielleicht etwas Offtopic aber: Das XML-Dokument ist nicht mal valide. Meines Wissens braucht man in jedem XML-Dokument einen Root-Tag der das ganze Dokument umschliesst: HTML: <root-tag-oder-wie-auch-immer> <bli>bar</bli> <bla /> <blub> <unterblub id="1">foo</unterblub> <unterblub id="2">FOOBAR!!!</unterblub> </blub> </root-tag-oder-wie-auch-immer> So long wirednaTure + Multi-Zitat Zitieren
#7 26. März 2008 AW: XML bestimmtes unterattribut ausgeben Weil es vielleicht nur ein Ausschnitt des Dokuments mit Wurzel "Character" war .... + Multi-Zitat Zitieren
#8 26. März 2008 AW: XML bestimmtes unterattribut ausgeben also das ganze wollte ich nicht posten hier, weil das ein bischen viel ist. Es handelt sich um ein Charakter XML von World of Warcraft. Das will ich auslesen. hier mal ein Charakter, der eine niedrige ausrüstung hat: Code: <?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/character-sheet.xsl"?><page globalSearch="1" lang="de_de" requestUrl="/character-sheet.xml"> <characterInfo> <character battleGroup="Blutdurst" charUrl="r=Kel%27Thuzad&n=Lolomatik" class="Krieger" classId="1" faction="Allianz" factionId="0" gender="M�nnlich" genderId="0" guildName="Brüder der Alianz" guildUrl="r=Kel%27Thuzad&n=Br%C3%BCder+der+Alianz&p=1" lastModified="29. Mai 2007" level="11" name="Lolomatik" prefix="" race="Zwerg" raceId="3" realm="Kel'Thuzad" suffix=""/> <characterTab> <talentSpec treeOne="0" treeThree="1" treeTwo="1"/> <buffs/> <debuffs/> <pvp> <lifetimehonorablekills value="0"/> <arenacurrency value="0"/> </pvp> <professions/> <title value=""/> <knownTitles/> <characterBars> <health effective="280"/> <secondBar casting="-1" effective="100" notCasting="-1" perFive="-1" type="r"/> </characterBars> <baseStats> <strength attack="54" base="37" block="1" effective="37"/> <agility armor="46" attack="-1" base="23" critHitPercent="5.40" effective="23"/> <stamina base="36" effective="36" health="180" petBonus="-1"/> <intellect base="20" critHitPercent="-1.00" effective="20" mana="-1" petBonus="-1"/> <spirit base="22" effective="22" healthRegen="7" manaRegen="-1"/> <armor base="332" effective="332" percent="19.92" petBonus="-1"/> </baseStats> <resistances> <arcane petBonus="-1" value="0"/> <fire petBonus="-1" value="0"/> <frost petBonus="-1" value="10"/> <holy petBonus="-1" value="0"/> <nature petBonus="-1" value="0"/> <shadow petBonus="-1" value="0"/> </resistances> <melee> <mainHandDamage dps="9.5" max="28" min="22" percent="0" speed="2.60"/> <offHandDamage dps="0.0" max="0" min="0" percent="0" speed="2.00"/> <mainHandSpeed hastePercent="0.00" hasteRating="0" value="2.60"/> <offHandSpeed hastePercent="0.00" hasteRating="0" value="2.00"/> <power base="87" effective="87" increasedDps="6.0"/> <hitRating increasedHitPercent="0.00" value="0"/> <critChance percent="6.20" plusPercent="0.00" rating="0"/> <expertise additional="0" percent="0.00" rating="0" value="0"/> </melee> <ranged> <weaponSkill rating="0" value="0"/> <damage dps="0.0" max="6" min="5" percent="0" speed="0.00"/> <speed hastePercent="0.00" hasteRating="0" value="0.00"/> <power base="24" effective="24" increasedDps="1.0" petAttack="-1.00" petSpell="-1.00"/> <hitRating increasedHitPercent="0.00" value="0"/> <critChance percent="4.24" plusPercent="0.00" rating="0"/> </ranged> <spell> <bonusDamage> <arcane value="0"/> <fire value="0"/> <frost value="0"/> <holy value="0"/> <nature value="0"/> <shadow value="0"/> <petBonus attack="-1" damage="-1" fromType=""/> </bonusDamage> <bonusHealing value="0"/> <hitRating increasedHitPercent="0.00" value="0"/> <critChance rating="0"> <arcane percent="0.00"/> <fire percent="0.00"/> <frost percent="0.00"/> <holy percent="0.00"/> <nature percent="0.00"/> <shadow percent="0.00"/> </critChance> <penetration value="0"/> <manaRegen casting="0.00" notCasting="0.00"/> </spell> <defenses> <armor base="332" effective="332" percent="19.92" petBonus="-1"/> <defense decreasePercent="0.00" increasePercent="0.00" plusDefense="0" rating="0" value="54.00"/> <dodge increasePercent="0.00" percent="4.33" rating="0"/> <parry increasePercent="0.00" percent="4.96" rating="0"/> <block increasePercent="0.00" percent="4.96" rating="0"/> <resilience damagePercent="0.00" hitPercent="0.00" value="0.00"/> </defenses> <items> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_shirt_05" id="38" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="0" slot="3"/> <item durability="8" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_chest_chain" id="2656" maxDurability="55" permanentenchant="0" randomPropertiesId="0" seed="-2050420520" slot="4"/> <item durability="7" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_belt_06" id="2172" maxDurability="18" permanentenchant="0" randomPropertiesId="0" seed="62338249" slot="5"/> <item durability="1" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_pants_03" id="2654" maxDurability="35" permanentenchant="0" randomPropertiesId="0" seed="894519314" slot="6"/> <item durability="9" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_boots_01" id="2650" maxDurability="25" permanentenchant="0" randomPropertiesId="0" seed="-1618076648" slot="7"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_bracer_03" id="2651" maxDurability="18" permanentenchant="0" randomPropertiesId="0" seed="805316009" slot="8"/> <item durability="13" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_gauntlets_04" id="2645" maxDurability="20" permanentenchant="0" randomPropertiesId="0" seed="-1994568836" slot="9"/> <item durability="0" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_misc_cape_02" id="2652" maxDurability="0" permanentenchant="0" randomPropertiesId="0" seed="962425412" slot="14"/> <item durability="8" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_axe_04" id="1011" maxDurability="35" permanentenchant="0" randomPropertiesId="0" seed="1532094652" slot="15"/> <item durability="32" gem0Id="0" gem1Id="0" gem2Id="0" icon="inv_shield_09" id="2212" maxDurability="35" permanentenchant="0" randomPropertiesId="0" seed="1822983566" slot="16"/> </items> </characterTab> </characterInfo> </page> Ich werde es morgen nochmal ausprobieren. Danke euch. Den Thread lass ich mal auf bis morgen. + Multi-Zitat Zitieren
#9 27. März 2008 AW: XML bestimmtes unterattribut ausgeben So, ich bin weiter gekommen. Habs per Xpath jetzt geschaft, so siehts aus: PHP: $char = simplexml_load_file ( "XML DATEI" ); for( $i = 0 ; $i < 18 ; $i ++) { $xpath = "//characterInfo/characterTab/items/item[@slot='" . $i . "']" ; if (! $item = $char -> xpath ( $xpath )) { echo "Fehler beim Auslesen des Items!" ; } else { foreach( $item [ 0 ]-> attributes () as $attribut => $value ) { $items [ $i ][ $attribut ]= $value ; echo $attribut . ' = ' . $value . "<br />\n" ; } } unset( $xpath ); } Soweit so gut! Nun habe ich aber ein kleines Problem. in der foreach Schleife schein $value ein Objekt zu sein und das wird dann in das Array $items gepackt. Nun weiß ich aber nicht genau, wie man das ausliest. Hier mal die ausgabe von $items: Code: Array ( [0] => Array \\ 0 = Slot ID ( [durability] => SimpleXMLElement Object ( [0] => 56 ) [gem0Id] => SimpleXMLElement Object ( [0] => 28556 ) [gem1Id] => SimpleXMLElement Object ( [0] => 23097 ) [gem2Id] => SimpleXMLElement Object ( [0] => 0 ) [icon] => SimpleXMLElement Object ( [0] => inv_helmet_09 ) [id] => SimpleXMLElement Object ( [0] => 28331 ) [maxDurability] => SimpleXMLElement Object ( [0] => 85 ) [permanentenchant] => SimpleXMLElement Object ( [0] => 2841 ) [randomPropertiesId] => SimpleXMLElement Object ( [0] => 0 ) [seed] => SimpleXMLElement Object ( [0] => 0 ) [slot] => SimpleXMLElement Object ( [0] => 0 ) ) ) Das, finde ich, sieht doch schon besser aus. Jetzt ist nur noch das SimpleXMLElement Object im Weg. Wie liest man das aus? Wenn ich bei $value noch [0] anhänge gehts auch nicht. Aber eigentlich müsste ich ja per -> auf den Inhalt zugreifen können, aber was soll ich für ein Namen angeben??? $value->??? Wer es jetzt schafft das zu lösen bekommen 1.000.000 Punkte + Multi-Zitat Zitieren
#10 27. März 2008 AW: XML bestimmtes unterattribut ausgeben Ich bin mir nicht sicher aber PHP: echo $array [ 0 ][ 'durability' ][ 0 ] ... könnte es so sein? Einfach per Array zugriff? + Multi-Zitat Zitieren
#11 27. März 2008 AW: XML bestimmtes unterattribut ausgeben ne, das wars leider nicht :/ + Multi-Zitat Zitieren
#12 27. März 2008 AW: XML bestimmtes unterattribut ausgeben mit xpath müsste das so gehen: //item[@slot="21"] + Multi-Zitat Zitieren
#13 27. März 2008 AW: XML bestimmtes unterattribut ausgeben PHP: $xpath = "//characterInfo/characterTab/items/item[@slot='21']" ; ist genau das gleiche wie PHP: $xpath = "//item[@slot='21']" ; Gerade festgestellt Aber das hat ja jetzt funktioniert, Murdoc. Ich habe nur das Problem, das in meinem eigentlichen Slot Array noch ein unter array ist wo das drin steht: Code: SimpleXMLElement Object ( [0] => 23097 ) + Multi-Zitat Zitieren
#14 27. März 2008 AW: XML bestimmtes unterattribut ausgeben lass dir doch mal alle eigenschaften des objekts mittels print_r ausgeben (das oben sieht mir nach var_dump aus). mit print_r hast du wesentlich mehr informationen. auch interessant ist get_class_methods(simpleXMLElement $obj) dann findest du dich mit sicherheit schneller zurecht. + Multi-Zitat Zitieren