• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

erneut PHP mit xPath

T

ToM80

Guest
Ich brauche den Inhalt eines Elements was ich über die Attribute identifiziere.

Hierfür habe ich folgendes XML:
Code:
<masterNode>
<site name="abc">
<screenshot="abc.img">
<tag id="0" label="abc.label"><![CDATA[abc]]></tag>
</screenshot>
</site>
</masterNode>

Ich will an den CDATA Wert des Tags Tag.
Hierfür habe ich folgende Funktion:
PHP:
function getNodeContentByPath($path,$nodeName,$nodeId='') {
//$path='//site[@name="abc"]/screenshot[@src="abc.img"]'
nlist=$this->xml->xpath($path);
  if ($nodeId!='') {
    $nodeId=explode('=',$nodeId);
    foreach ($nlist[0]->$nodeName as $node) {
      if ($node[$nodeId[0]]==$nodeId[1]) {
	//return $node[$nodeId[0]].'=='.$nodeId[1];
	return (string)$node->$nodeName;
      }
    }
  } else {
    return (string)$nlist[0]->$nodeName;
  }

Ich bekomme kein Ergenis zurück. var_dump liefert object(SimpleXMLElement)#9 (0) { }

Wie komme ich nur an diesen Tagnamen?

Für schnelle Hilfe wäre ich sehr dankbar.
 
Ich habe die Funktion mittlerweile angepasst. Das Foreach brauche ich ja gar net, wenn ich den xpath konsequent umsetze.
Die Ausgabe bleibt aber leider die selbe.
PHP:
function getNodeContentByPath($path,$nodeName) {
//$path='//site[@name="abc"]/screenshot[@src="abc.img"]/tag[@label="abc.label"]'
nlist=$this->xml->xpath($path);
return (string)$nlist[0]->$nodeName;
}
 
Versteh noch nicht was du brauchst? 'abc' ?
Dein xml mußte ich abändern, so was '<screenshot="abc.img">' mag wohl simple XML nicht.

PHP:
$xml_str = <<< XML
<masterNode>
<site name="abc">
<screenshot name="abc.img">
<tag id="0" label="abc.label"><![CDATA[abc]]></tag>
</screenshot>
</site>
</masterNode>
XML;

$xml = simplexml_load_string($xml_str);
//http://jspit.de/?page=Debug
//debug::write($xml);
$nlist = $xml->xpath("//tag[@label='abc.label']");
$content = (string)$nlist[0];
var_dump($content); //string(3) "abc" 
//debug::write($nlist,(string)$nlist[0]);

LG jspit
 
Hi jspit, danke für deine Hilfe. Das XML sieht tatsächlich so aus
Code:
<screenshot src="abc.jpg">
. War ein Fehler in der Musterdarstellung. Ich habe jedoch mit deiner Hilfe gesehen, dass ich alles im Prinzip richtig hatte. Mein Problem war nur, dass ich aufs falsche XML zugegriffen habe. Manchmal hilft es einfach mal das Ding auszumachen und ne Nacht drüber zu schlafen ^^

Danke jedoch für Deine Hilfe.
 
Zurück
Oben