Ich habe verschiedene XML-Dateien, wobei ich für jede XML-Datei alle einzelnen Tags umbenannt habe, so dass jede XML-Datei den gleichen Tag-Namen hat. Das war einfach, weil die Funktion für die XML-Datei angepasst wurde.Überprüfen, ob ein Kind existiert? - SimpleXML (PHP)
Aber im Moment des Schreibens von 7 neuen Funktionen für jede XML-Datei möchte ich jetzt prüfen, ob eine XML-Datei ein bestimmtes Kind hat oder nicht. Denn wenn ich will sagen:
foreach ($items as $item) {
$node = dom_import_simplexml($item);
$title = $node->getElementsByTagName('title')->item(0)->textContent;
$price = $node->getElementsByTagName('price')->item(0)->textContent;
$url = $node->getElementsByTagName('url')->item(0)->textContent;
$publisher = $node->getElementsByTagName('publisher')->item(0)->textContent;
$category = $node->getElementsByTagName('category')->item(0)->textContent;
$platform = $node->getElementsByTagName('platform')->item(0)->textContent;
}
ich manchmal: PHP Notice: Trying to get property of non-object in ...
Zum Beispiel. Zwei verschiedene XML-Blätter. Ein enthält Verlag, Kategorie und Plattform, die andere nicht:
XML 1:
<products>
<product>
<desc>This is a Test</desc>
<price>11.69</price>
<price_base>12.99</price_base>
<publisher>Stackoverflow</publisher>
<category>PHP</category>
</packshot>
<title>Check if child exists? - SimpleXML (PHP)</title>
<url>http://stackoverflow.com/questions/ask</url>
</product>
</products>
XML 2:
<products>
<product>
<image></image>
<title>Questions</title>
<price>23,90</price>
<url>google.de/url>
<platform>Stackoverflow</platform>
</product>
</products>
Sie sehen, manchmal eine XML-Datei enthält Verlag, Kategorie und Plattform aber manchmal nicht. Es könnte aber auch sein, dass nicht jeder Knoten einer XML-Datei alle Attribute wie im ersten enthält!
Also muss ich für jeden Knoten einer XML-Datei individuell prüfen, ob der Knoten Herausgeber, Kategorie oder/und Plattform enthält.
Wie kann ich das mit SimpleXML? Ich dachte über Switch-Fall, aber zuerst muss ich überprüfen, welche Childs in jedem Knoten enthalten sind.
EDIT: Vielleicht habe ich eine Lösung gefunden. Ist das eine Lösung oder nicht?
if($node->getElementsByTagName('platform')->item(0)){
echo $node->getElementsByTagName('platform')->item(0)->textContent . "\n";
}
Grüße und Danke!
Sie tun können, 'if (isset ($ node-> getElementsByTagName ('Verlag ') -> item)) 'und' if (is_array ($ node-> getElementsByTagName (' publisher ') -> item))' validiere – JustOnUnderMillions
Aber du solltest 'simplexml' direkt verwenden. – JustOnUnderMillions
Mögliches Duplikat von [php SimpleXML prüfen, ob ein Kind existiert] (http://stackoverflow.com/questions/1560827/php-simplexml-check-if-a-child-exists) –