我们说我有以下XML:
<family>
<father>
<date_of_birth>1971-01-25</date_of_birth>
<first_name>Bob</first_name>
<last_name>Johnson</last_name>
</father>
<mother>
<date_of_birth>1977-09-12</date_of_birth>
<first_name>Mary</first_name>
<last_name>Johnson</last_name>
</mother>
<child>
<date_of_birth>2006-04-21</date_of_birth>
<first_name>Pete</first_name>
<last_name>Johnson</last_name>
</child>
</family>
我决定只想使用<date_of_birth>
个值。我做了以下事情:
$DOBs = $dom->getElementsByTagName("date_of_birth");
现在,我的问题是,虽然我循环了这些值:
foreach ($DOBs as $date)
{
echo $date->nodeValue . "<br>";
}
我如何判断这些价值观是来自母亲,父亲还是孩子?有没有办法检查DomElement
$ date是母亲还是父亲的孩子或孙子?基本上我需要知道这些是否在标签内(无论多深)。
修改
例如(请注意方法is_child_of
已组成):
foreach ($DOBs as $date)
{
if($date->is_child_of('father'))
{
//This is the father's date of birth.
}
}
我正在寻找能告诉我<date_of_birth>
在另一个元素中的东西。所以,如果我说:
if($date->is_child_of('family'))
{
}
或
if($date->is_child_of('father'))
{
}
这些都是正确的(假设我们正在处理父亲的date_of_birth)并且if语句中的代码将被触发。
答案 0 :(得分:1)
如果您只是寻找直接父级,请使用parentNode
个实例的nodeName
和DOMNode
属性。
对于间接父级,除了使用XPath之外,我唯一知道的就是这个函数:
function isChildOf(DOMNode $childNode, $parentNodeName)
{
while ($childNode->parentNode)
{
if ($childNode->parentNode->nodeName == $parentNodeName) {
return true;
}
else {
$childNode = $childNode->parentNode;
}
}
return false;
}
未经测试,使用风险自负。