Harry: SimpleXML: Existenz eines Elementes feststellen, DTDs

Beitrag lesen

Holladiewaldfee,

ich bastel grade ein bißchen mit SimpleXML rum.
Als Beispiel parse ich eine XML-Datei die vereinfacht ungefähr folgende Struktur hat:

<e1>
 <e2/>
</e1>

Das Element e2 muß nicht unbedingt in e1 vorkommen, kann es aber durchaus, wenn es denn Lust hat.

$oXML = simplexml_load_file("test.xml");
$oE1 = &$oXML->e1;

Jetzt möchte ich wissen, ob der Knoten e1 ein Unterelement e2 besitzt.
Wie kann ich das nun am dümmsten machen?

Im Moment behelfe ich mir mit einer XPath-Query auf e1:
if(count($oE1->xpath('e2'))>0) ...

Geht das nicht auch irgendwie eleganter? Abfragen der Art isset($oE1->e2) oder is_object($oE1->e2) scheinen sinnlos, da PHP die SimpleXML-Sachen intern irgendwie so verwaltet (Typ SimpleXMLObject), daß solche Abfragen immer erfolgreich sind, egal ob $oE1->e2 nun existiert oder nicht. Bleibt da wirklich nur der unschöne Weg über XPath?

Zweite Frage:
Kann man den SimpleXML-Parser dazu überreden, die zur XML-Datei gehörige DTD zu berücksichtigen, sofern diese extern in einer Datei abgelegt ist? Standardmäßig scheint er die nämlich einfach zu übergehen, was sehr unschön ist, vor allem da er dann angeblich nicht definierte Entities anmeckert.

Danke schonmal.

Ciao,

Harry

--
  Bald kommt die Waldfee ... (Projektphase: Planung)
  Bis dahin:
  http://harry.ilo.de/projekte/berge/