如何通过类名称解析元素中的元素?

时间:2019-07-17 04:54:44

标签: php dom domdocument domxpath

如何按类在特定元素标签内选择任何元素。我需要从元素“ form”内部的“ input”元素中检索属性“ name”的值。例如。有2个表单元素,分别名为_arrived和_class。我需要从表单_class

检索所有属性名称值
   $source = '
    <form method="post" action"arrived.php" class="_arrived">
    <input type="hidden" name="type1" value="value1" autocomplete="off">
    <input type="hidden" name="type2" value="value2" autocomplete="off">
    <input type="hidden" name="type3" value="value3">
    <input type="hidden" name="type4" value="value4">
    </form>

    <form method="post" action="destiny.php" class="_class">
    <input type="hidden" name="type1" value="value1" autocomplete="off">
    <input type="hidden" name="type2" value="value2" autocomplete="off">
    <input type="hidden" name="type3" value="value3">
    <input type="hidden" name="type4" value="value4">
    <input type="hidden" name="type5" value="value5">
    <input type="hidden" name="type6" value="value6">
    <input type="hidden" name="type7" value="value8">
    <input type="hidden" name="type8" value="value9">
    </form>';


$dom = new DOMDocument();
$dom->loadHTML($source);

$xpath = new DOMXpath($dom);
$items = $xpath->query('//form[@class="_class"]');

 $form = $items->item(0);

 $element = $form->getElementsByTagName("input");

 foreach($element as $elemen){
     foreach($elemen as $value){
         echo $value->getAttribute('name').'<br>';
     }
 }

4 个答案:

答案 0 :(得分:0)

为什么在元素上有循环?这应该起作用:

...

$elements = $form->getElementsByTagName("input");

foreach($elements as $e){
  echo $e->getAttribute('name').'<br>';
}

答案 1 :(得分:0)

您只需要一个循环

foreach($element as $elemen){
    echo $elemen->getAttribute('name').'<br>';
 }

,您将获得所有名称属性。

答案 2 :(得分:0)

您可以直接从输入元素中选择实际的name属性,而不必经历多次对不同方法的调用,然后循环遍历它们并输出文本内容。

这里XPath表达式首先选择您的形式,然后选择每个输入元素,最后使用@name选择名称属性...

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($source);

$xpath = new DOMXpath($dom);
foreach($xpath->query('//form[@class="_class"]//input/@name') as $value){
    echo $value->textContent.'<br>';
}

答案 3 :(得分:-1)

1。首先,您必须迭代$elements一次

2。您必须使用action="arrived.php"而不是action"arrived.php"才能从代码中删除警告,即:

  

警告:DOMDocument :: loadHTML():解析属性名称时出错   实体行:第24行在/ in / tl53u中的2

执行以下操作:

$dom = new DOMDocument();
$dom->loadHTML($source);

$xpath = new DOMXpath($dom);
$items = $xpath->query('//form[@class="_class"]');

 $form = $items->item(0);

 $element = $form->getElementsByTagName("input");

 foreach($element as $elemen){
    echo $elemen->getAttribute('name').'<br>';
 }

输出:-{https://3v4l.org/Ma8bg

您可以使用libxml_use_internal_errors(true);忽略警告,但最好的方法是解决警告。检查下面的参考:-

Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity

相关问题