Получаете странный результат PHP Xpath при добавлении дочернего узла - идеи? - PullRequest
0 голосов
/ 13 января 2019

Итак, я потратил около часа, просто пытаясь добавить элемент script в раздел head документа HTML. Я следую многочисленным примерам, которые показывают, как это сделать, но я не получаю ожидаемого результата.

Вот что у меня есть:

<head>
    <child1>
    <child2>
</head>

хочу

<head>
    <child1>
    <child2>
    <script></script>
</head>

Итак, мой код

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);
$head = $xpath->query('//head');
$child = $doc->createElement( 'script' );

// append
$head->item(0)->appendChild( $child );

Это добавление нового элемента скрипта после тега body, следующего за заголовком ... Я заканчиваю с

<head>
    <child1>
    <child2>
</head>
<body>
    <script></script>

Я действительно понятия не имею, как это может быть, основываясь на всем, что я понимаю о манипулировании xpath и DOM в PHP.

Идеи

спасибо, Брайан

1 Ответ

0 голосов
/ 13 января 2019

Хорошо, я думаю, что моя проблема связана с DOM_HIERARCHY_REQUEST_ERR.

Я думаю, мне нужно было правильно отформатировать тег сценария. Я просто пытался проверить, что xpath дает мне правильные данные и что я могу добавить дочерний элемент, но я не осознавал, что существует проверка, которая позволяет предотвратить добавление дочерних узлов, которые не придерживаются определенных правил!

Так что теперь это работает:

$head = $xpath->query('//head');
$child = $doc->createElement( 'script' );
$childAttr = $doc->createAttribute( 'src' );
$childAttr->value = $somepath;
$child->appendChild($childAttr);
$head->item(0)->appendChild( $child );

Brian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...