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

How to parse element within element by class name?

如何通过 class select 特定元素标签内的任何元素。我需要从元素 "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>';
     }
 }

为什么元素上有循环?这应该有效:

...

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

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

你只需要一个循环

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

您将获得所有名称属性。

1.First 你必须迭代 $elements 一次

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

Warning: DOMDocument::loadHTML(): error parsing attribute name in Entity, line: 2 in /in/tl53u on line 24

喜欢以下:

$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

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

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

$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>';
}