aeternitas103
26-03-2008, 15:39
Hallo zusammen, ich brauche eure fachmännische Hilfe in Zusammenhang mit XML. Folgendes XML Schema habe ich.
["mitarbeiter"]=>
object(SimpleXMLElement)#18 (1) {
["item"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#26 (11) {
["id"]=>
string(1) "4"
...
["beruf"]=>
object(SimpleXMLElement)#19 (1) {
["va_beruf"]=>
object(SimpleXMLElement)#28 (1) {
["item"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#29 (10) {
["id"]=>
string(1) "4"
["beruf"]=>
string(2) "Hans im Glück"
Hier zu meiner Frage: Ich durchlaufe die "mitarbeiter" per foreach und möchte für jeden Mitarbeiter den Zutreffenden Beruf (Hans im Glück) herausfinden. Wie kann ich mit simplexml am einfachsten das gewünschte Element auslesen?
Gibts ne Möglichkeit das ich direkt darauf zugreiffen kann oder muss ich nochmals per Schleife alles durchrattern?
Quetschi
26-03-2008, 17:34
Hallo,
wie sieht dein bisheriger Versuch aus? ;)
Ohne SimpleXml näher zu kennen tippe ich nach einem kurzem Besuch von
http://de3.php.net/simplexml (guck mal gleich auf das example#2)
irgendwie was in der Richtung von
$xml->mitarbeiter[x]->beruftippen, wobei das x eben durch den entsprechenden (Array)-Index ersetzt werden muss, den du ja von deiner foreach-Schleiche kriegen müsstest.
EDIT:
wobei - wenn ich mir jetzt dein Beispiel da so anseh :confused:
Kannst du mal die original Xml-Datei posten?
aeternitas103
27-03-2008, 15:26
Momentan mache ich das so:
foreach($this->xmlData->mitarbeiter->item as $value)
{
foreach($this->xmlData->beruf->va_beruf->item as $beruf)
{
if($value->id == $beruf->id)
{
echo $beruf->beruf;
}
}
}
das Problem ist, das ich bei beruf->item die Nummer des Array nicht weiss, so kann ich nicht direkt darauf zugreiffen.
Quetschi
27-03-2008, 16:37
puh - kenn wie gesagt simpleXml nicht wirklich.
Mit Dom würd ich halt einfach mit ner XPath-Query direkt drauf zugreifen.
Quetschi
27-03-2008, 16:42
ähm...
foreach($this->xmlData->mitarbeiter->item as $itemID=>$value)
{
echo $this->xmlData->beruf->va_beruf->item[$itemID]->beruf;
}
evtl.??
UPDATE:
na - glaub bin da auch wieder auf dem falschen Dampfer...
Ich würde wie gesagt gern mal dein QuellXml sehen...
PHP-Desaster
27-03-2008, 21:23
Mit Dom würd ich halt einfach mit ner XPath-Query direkt drauf zugreifen.Warum dann nicht auch mit SimpleXML (http://de.php.net/manual/de/function.simplexml-element-xpath.php)? ;)
Quetschi
28-03-2008, 09:55
Original geschrieben von PHP-Desaster
Warum dann nicht auch mit SimpleXML (http://de.php.net/manual/de/function.simplexml-element-xpath.php)? ;) Ich sagte doch, dass ich simpleXml praktisch so gut wie nicht kenne :motz: ... :D
Wie kann man auf @ in Simple xml Objekten zugreifen?
BSP:
FELDER=SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => Zeichnung_Art
[id] => 16
[repetition] => 1
[maxRepetition] => 1
[table] => Zeichnung_Planum
)
)
Möchte nun gerne auf den name zugreifen Problem
$felder->{'@attributes'} hilft auch nicht.
Vielleicht hat jemand noch einen Vorschlag wenn nicht muss ich es wohl auch mit x-Path machen :-(
hat sich erledigt, @attributes ist ja ein Array, deshalb Zugriff über $felder["name"]
mkb_webprint
13-07-2009, 12:16
Wie kann man auf @ in Simple xml Objekten zugreifen?
BSP:
FELDER=SimpleXMLElement Object
(
[@attributes] => Array
(
[name] => Zeichnung_Art
[id] => 16
[repetition] => 1
[maxRepetition] => 1
[table] => Zeichnung_Planum
)
)
Möchte nun gerne auf den name zugreifen Problem
$felder->{'@attributes'} hilft auch nicht.
Vielleicht hat jemand noch einen Vorschlag wenn nicht muss ich es wohl auch mit x-Path machen :-(
Ausgehend von deiner Frage und der Struktur ($felder->) sollte es eigentlich so gehen:
<?php
$wert_des_attributs = $felder->attributes()->name_des_attributs;
// Als Beispiel
$wert = $felder->attributes()->name;
echo $wert; // gibt 'Zeichnung_Art' aus
?>
Siehe auch http://de.php.net/manual/de/function.simplexml-element-attributes.php