DOM:使用PHP,如何确定节点是否是其父节点的最后一个子节点

时间:2010-04-16 11:03:00

标签: php xml dom

我正在试图弄清楚如何知道一个节点是否是另一个节点的最后一个孩子。

我知道如何检索父的lastChild名称($node->parentNode->lastChild->nodeName),但有时在同一个父级中有许多相同的节点名称,这个名称绝对不是找到最后一个孩子的方式。

我正在寻找某种迭代器,它可以检索子节点的数量,并根据当前节点的位置,判断当前节点是否是最后一个子节点。

谢谢!

2 个答案:

答案 0 :(得分:2)

在纯DOM术语中,如果孩子是父母的最后一个孩子,则其nextSibling属性将为null

Javascript示例(不是您正在寻找Javascript):

if (!child.nextSibling) {
    // It's the last child
}

请务必注意nextSibling遍历节点。有时您想要遍历元素(而不是文本节点等)。例如,在这个标记中:

<p>Testing <span>one</span> two three</p>

... span不是其容器中的最后一个节点(因为它后跟一个文本节点),但它是其容器中的最后一个元素。如果你想查找它,你需要一个循环检查nodeType,例如:

// =====
// Note: This example is in JavaScript, but I assume it's easy enough
// to follow what it's doing and translate it to PHP
// =====

// Utility function
function nextElement(node) {
    var rv = node.nextSibling;
    while (rv && rv.nodeType !== 1) {
        rv = rv.nextSibling;
    }
    return rv;
}

// Usage
if (!nextElement(child)) {
    // There was no element after `child`
}

答案 1 :(得分:1)

由于这是一个PHP问题,我将为后人留下一个PHP答案(使用DOM):

if ($node->isSameNode($node->parentNode->lastChild))
{
    //...
}

如果您使用的是SimpleXML,只需使用dom_import_simplexml()转换您的节点。