添加子节点时得到奇怪的PHP Xpath结果-想法?

时间:2019-01-13 17:09:39

标签: php dom xpath

因此,我花了大约一个小时来尝试将脚本元素添加到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 );

这是在head之后的body标签之后添加新的script元素...我最终会得到

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

根据我对PHP中的xpath和DOM操作的了解,我真的不知道这怎么可能。

想法?

谢谢,布莱恩

1 个答案:

答案 0 :(得分:0)

好的,我认为我的问题与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 );

布莱恩