【问题标题】:PHP DomDocument - getAllChildrenByTagNamePHP DomDocument - getAllChildrenByTagName
【发布时间】:2012-09-05 19:03:01
【问题描述】:

PHP中是否有类似“getAllChildrenByTagName”的函数?

$dom = new DOMDocument();
$dom->loadXML('<p><a id="1">test 1</a><span><a id="2">test 2</a></span></p>');
foreach($dom->getElementsByTagName('a') AS $node)
    echo($node->textContent);

这里我只想要“id = 1”的 a-Tag。有可能吗?

【问题讨论】:

  • 请注意,在有效的 HTML 文档中应该只有一个 ID 为 "a" 的元素。
  • @nickb 链接呢,即:&lt;a href="http://www.google.com&gt;Google&lt;/a&gt; 或者您的意思是所有元素 id 都应该是唯一的?
  • 我的意思是只有一个 ID 为 "1" 的元素。

标签: php domdocument children


【解决方案1】:

您可以使用 XPath 直接抓取您要查找的元素:

$dom = new DOMDocument();
$dom->loadXML('<p><a id="1">test 1</a><span><a id="2">test 2</a></span></p>');

$xpath = new DOMXpath( $dom);
$a = $xpath->query( '//a[@id="1"]')->item( 0);
echo $a->textContent;

这个will print

test 1 

【讨论】:

  • +1 击败我。接得好。指定第一个索引-&gt;item(0); 将确保只返回一个元素而不是DOMNodeList
【解决方案2】:

这里最好使用 XPath。看看下面的 PHP 代码。

$dom = new DOMDocument();
$dom->loadXML('<p><a id="1">test 1</a><span><a id="2">test 2</a></span></p>');
$xpath = new DOMXpath($dom);
$elements = $xpath->query("//a[@id='1']");

【讨论】:

    【解决方案3】:

    不,不使用 getElementsbyTagName。

    最好使用 XPath 查询,它们是“发明”来做这些事情的。

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 2013-06-16
      • 2011-02-20
      • 2011-07-26
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      相关资源
      最近更新 更多