我有一个DomNode:
<p>
This is a test <xref>1</xref> in the XML <xref>2</xref>,<xref>3</xref>,<xref>4</xref> bla bla bla....
</p>
使用getElementsByTagName
命令,我将从段落xref
获取所有p
。
现在,我想知道在选定的xref
之前是否还有另一个xref
。
为此,我考虑使用previousSibling
,然后检查标记名称是否为xref
,但这不起作用。
关于如何做到这一点的任何想法?
以下是我的尝试:
$refs = $paragraph->getElementsByTagName("xref");
foreach ($refs as $key=>$ref) {
if ($ref->previousSibling->tagName == "xref") {
//do something
}
}
答案 0 :(得分:2)
米洛斯,我已经为你的问题想出了一个解决方法。这不是一个漂亮的解决方案,但似乎确实可以完成这项工作。
由于浏览兄弟节点不起作用,我想到比较xref
调用返回的每个getElementsByTagName
节点的父节点,如下所示:
<?php
$xml = <<<XML
<body>
<p>
This is a test <a>0</a> <xref>1</xref> in the XML <xref>2</xref>,<xref>3</xref>,<xref>4</xref> bla bla bla....
</p>
<p>
<xref>5</xref>
</p>
</body>
XML;
$dom = new DOMDocument;
$dom->loadXML($xml);
$xrefs = $dom->getElementsByTagName('xref');
foreach ($xrefs as $key => $xref) {
if (!empty($parent)) {
$previousParent = $parent;
}
$parent = $xref->parentNode;
if ($key && ($parent === $previousParent)) {
echo $xref->nodeValue, "\n";
}
}
2
3
4