呃。 PHP 假人在这里抱歉。在这里搜索了又搜索,但搜索 foo 还不够好。我觉得我正在围绕一个答案跳舞,但是 array_filter、array_search、递归等。我只是在精神上无法掌握它哈哈。
我有一个来自 XML 导出的示例,其中 XML 的顺序不一致,格式也不一致,嵌套级别有时甚至不同等等,所以我无法根据导出中的具体位置来获取值,即使是假人我也能做到:
<INFRA>
<GUID>7C32C0A2-EF31-11E9-8128-4CCC6A98779E</GUID>
<ID>501</ID>
<NAME>P Cedar</NAME>
<TYP>36</TYP>
<TYPKRZ>50_IN_36_PARKPLATZ</TYPKRZ>
<TYPNAME>parking place</TYPNAME>
<STATUS>open</STATUS>
<STATUSWERT k="SONSTIGE" v="miscellaneous">1</STATUSWERT>
</INFRA>
在这种情况下,我需要查找/搜索唯一的字符串
<NAME>P Cedar</NAME>
,无论它最终出现在导出的哪个位置。然后我需要为该特定 <STATUS>
的 <INFRA><NAME>
分配一个变量,以便我可以对其执行一些运算符。蒂亚!
$xml = <<<XML
<ROOT>
<INFRA>
<GUID>7C32C0A2-EF31-11E9-8128-4CCC6A98779E</GUID>
<ID>501</ID>
<NAME>P Cedar</NAME>
<TYP>36</TYP>
<TYPKRZ>50_IN_36_PARKPLATZ</TYPKRZ>
<TYPNAME>parking place</TYPNAME>
<STATUS>open</STATUS>
<STATUSWERT k="SONSTIGE" v="miscellaneous">1</STATUSWERT>
</INFRA>
<INFRA>
<GUID>7C32C0A2-EF31-11E9-8128-4CCC6A98779E</GUID>
<ID>501</ID>
<NAME>D John</NAME>
<TYP>36</TYP>
<TYPKRZ>50_IN_36_PARKPLATZ</TYPKRZ>
<TYPNAME>parking place</TYPNAME>
<STATUS>closed</STATUS>
<STATUSWERT k="SONSTIGE" v="miscellaneous">1</STATUSWERT>
</INFRA>
</ROOT>
XML;
function getStatus($doc, $name)
{
$xpath = new DOMXPath($doc);
$entries = $xpath->query('//INFRA/NAME');
foreach($entries as $entry)
{
if($entry->textContent == $name)
return $entry->parentNode->getElementsByTagName('STATUS')[0]->textContent;
}
return null;
}
$doc = new DOMDocument();
$doc->loadXML($xml);
echo getStatus($doc, 'P Cedar'); // open
echo getStatus($doc, 'D John'); // closed