PHP 从随机嵌套、随机输出的 XML 中获取数组值,然后获取与第一个值搜索相关的关联值

问题描述 投票:0回答:1

呃。 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>
分配一个变量,以便我可以对其执行一些运算符。蒂亚!

php xml nested
1个回答
0
投票

这是一个基于 DOMXPath 的解决方案:

$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
© www.soinside.com 2019 - 2024. All rights reserved.