Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ho使用PHP循环访问Dom并查找数据id_Javascript_Php_Html - Fatal编程技术网

Javascript Ho使用PHP循环访问Dom并查找数据id

Javascript Ho使用PHP循环访问Dom并查找数据id,javascript,php,html,Javascript,Php,Html,我有以下问题。我想读入一个外部HTML文件。我只需要body标记之间的HTML元素。为此,我在下面创建了PHP代码,它可以正常工作。我现在需要再添加一个功能,当我循环时,我需要检查HTML元素是否获得了数据id,如果是,那么我必须向该节点添加一个值。该值保存在一个PHP数组中,键与data-id相同。有什么提示我可以这样做吗?我认为它需要进入foreach$children作为$child循环,对吗?如果是,我如何检查数据id?任何暗示都将不胜感激 $doc = new DOMDocument

我有以下问题。我想读入一个外部HTML文件。我只需要body标记之间的HTML元素。为此,我在下面创建了PHP代码,它可以正常工作。我现在需要再添加一个功能,当我循环时,我需要检查HTML元素是否获得了数据id,如果是,那么我必须向该节点添加一个值。该值保存在一个PHP数组中,键与data-id相同。有什么提示我可以这样做吗?我认为它需要进入foreach$children作为$child循环,对吗?如果是,我如何检查数据id?任何暗示都将不胜感激

 $doc = new DOMDocument();
    $doc->loadHTMLFile("extracontent.html");

function DOMinnerHTML(DOMNode $element,$attr) 
{ 
  $innerHTML = ""; 
  $children  = $element->childNodes;

foreach ($children as $child) 
{
    $innerHTML .= $element->ownerDocument->saveHTML($child);
}

    return $innerHTML; 
}  


$oldDom = $doc->getElementsByTagName("body"); 

foreach ($oldDom as $element) 
{ 
   $newDom = DOMinnerHTML($element); 
} 

首先,我将使用xpath查询查找正文中具有数据id属性的所有子节点,然后将其追加或构建数组:

$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$dox = new DOMXPath($dom);
$nodes = $dox->query('/html/body//*[@data-id]');
$array = [];
foreach ($nodes as $key => $node) {
    $node->appendChild(new DOMText('add text'));
    $array[$key] = ['data-id' => 'add text'];
}
echo $dom->saveHTML();

非常有趣的解决方案。非常感谢你。我仍在试图弄清楚每一部分以及它的作用。愚蠢的问题,但是,既然这个值是我的PHP数组中的匹配键,这就是appendChild所需要的,如果我看得对的话……如果你需要在上面附加一些东西,代码段会按原样工作,但如果你想存储它的值,你可以通过textContent属性访问它:$node->textContentI实际上必须找到它例如,我现在需要知道这个$node获得了数据id maintTitle,这样我就可以将它与我的PHP数组的值相匹配$节点->文本内容似乎没有给我这个信息,或者我误解了你?啊,对不起,我现在知道了。只需使用getAttribute'data-id':$node->getAttribute'data-id'就可以了,一切似乎都正常。非常感谢你的帮助!!