18 Stimmen

Übergeordneten Knoten des DOMElements ermitteln

Ich übersetze gerade meinen C#-Code für YouTube-Videokommentare in PHP. Um Kommentarantworten richtig zu verschachteln, muss ich XML-Knoten neu anordnen. In PHP verwende ich DOMDocument und DOMXPath, die dem C# XmlDocument sehr ähnlich sind. Ich bin mit meiner Übersetzung schon recht weit gekommen, aber jetzt hänge ich beim Abrufen des übergeordneten Knotens eines DOMElements fest. Ein DOMElement hat keine parent_node() Eigenschaft, nur ein DOMNode bietet diese Eigenschaft.

Nachdem ich anhand der Zeichenfolge "in-reply-to" in einem Link-Element festgestellt habe, dass ein Kommentar eine Antwort auf einen früheren Kommentar ist, muss ich seinen übergeordneten Knoten ermitteln, um ihn unter dem Kommentar, auf den er antwortet, zu verschachteln:

// Get the parent entry node of this link element
$importnode = $objReplyXML->importNode($link->parent_node(), true);

28voto

Marius Punkte 55729

DOMElement ist eine Unterklasse von DOMNode also hat es die Eigenschaft parent_node. Verwenden Sie einfach $domNode->parentNode; um den übergeordneten Knoten zu finden.

In Ihrem Beispiel ist der übergeordnete Knoten von $importnode null, weil er in das Dokument importiert wurde und daher noch keinen übergeordneten Knoten hat. Sie müssen ihn an ein anderes Element anhängen, bevor er ein übergeordnetes Element hat.

6 Stimmen

DOMElement erweitert DOMNode und DOMNode::parentNode ist öffentlich, so dass diese Eigenschaft auch auf DOMElement verfügbar ist. php.net/manual/de/class.domnode.php y php.net/handbuch/de/class.domelement.php

3voto

Dimas Lanjaka Punkte 47

Ersetzen Sie parent_node() a parentNode

1voto

Marius Punkte 55729

Ich bin mir nicht ganz sicher, wie Ihr Code funktioniert, aber es scheint, dass Sie einen kleinen Fehler in Ihrem Code haben.

In der Zeile, die Sie in Ihrer Frage angegeben haben, steht $link->parent_node() , aber in der Antwort mit dem gesamten Codeschnipsel steht $link**s**->parent_node() .

Ich glaube nicht, dass die s sollte dort sein.

Außerdem denke ich, dass Sie $link->parentNode und nicht $link->parent_node() verwenden sollten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X