Определить родительский узел DOMElement

Я перевожу свой код С# для комментариев к видео YouTube на PHP. Чтобы правильно вложить ответы на комментарии, мне нужно переупорядочить узлы XML. В PHP я использую DOMDocument и DOMXPath, что близко соответствует C# XmlDocument. Я продвинулся довольно далеко в своем переводе, но теперь я застрял на получении родительского узла DOMElement. Элемент DOMElement не имеет свойства parent_node(), только DOMNode предоставляет это свойство.

После определения того, что комментарий является ответом на предыдущий комментарий на основе строки «in-reply-to» в элементе ссылки, мне нужно получить его родительский узел, чтобы вложить его под комментарием, на который он отвечает:

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

person user2601    schedule 26.08.2008    source источник


Ответы (3)


DOMElement является подклассом DOMNode, поэтому у него есть свойство parent_node. Просто используйте $domNode->parentNode; чтобы найти родительский узел.

В вашем примере родительский узел $importnode имеет значение null, потому что он был импортирован в документ и, следовательно, еще не имеет родителя. Вам нужно прикрепить его к другому элементу, прежде чем у него появится родитель.

person Marius    schedule 26.08.2008
comment
DOMElement расширяет DOMNode, а DOMNode::parentNode является общедоступным, поэтому это свойство также доступно в DOMElement. php.net/manual/en/class.domnode.php и php.net/manual/en/class.domelement.php - person feeela; 06.09.2011

Я не совсем уверен, как работает ваш код, но похоже, что у вас есть небольшая ошибка в вашем коде.

В строке, которую вы разместили в своем вопросе, у вас есть $link->parent_node(), но в ответе со всем фрагментом кода у вас есть $link**s**->parent_node().

Я не думаю, что s должен быть там.

Кроме того, я думаю, вам следует использовать $link->parentNode, а не $link->parent_node().

person Marius    schedule 26.08.2008

Замените parent_node() на parentNode

person Dimas Lanjaka    schedule 31.03.2018