如何使用PHP在XML中搜索特定名称


How to search for certain name in XML with PHP

我希望能够遍历XML中的每个节点,当我找到某个用户名时,我希望从该节点读取所有数据。

例如:

<Users>
   <User>
      <Username>admin</Username>
      <Server>10.x.x.x</Server>
   </User>
   <User>
      <Username>test</Username>
      <Server>11.x.x.x</Server>
   </User>
</Users>

我需要能够找到用户名=admin,然后从同一节点获取服务器。我将使用PHP,您可以在任意两个变量中进行保存。

使用Xpath和DomDocument,像这样的东西应该可以完成任务:

$doc = new DOMDocument;
$doc->loadXML($xml); // Your xml string
$xpath = new DOMXpath($doc);
$query = '//Users/User/Username[. = "admin"]'; // Looking for user admin
$entries = $xpath->query($query);
foreach ($entries as $entry) {
    //Getting the "server" node value for "admin" user
    echo $entry->nextSibling->nextSibling->nodeValue; // Display 10.x.x.x
}

此变体适用于

$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadXML(file_get_contents('xpath.xml'));
$xpath = new DOMXPath($dom);
$query = '//Users/User/Username[text()="admin"]/following-sibling::Server';
echo $xpath->query($query)->item(0)->nodeValue;

尝试以下方法:

$input = '<Users>
   <User>
      <Username>admin</Username>
      <Server>10.x.x.x</Server>
   </User>
   <User>
      <Username>test</Username>
      <Server>11.x.x.x</Server>
   </User>
</Users>';
$xml = new SimpleXMLElement($input);
$result = $xml->xpath('/Users/User[Username="admin"]');
// Process $result to your liking..

为了简单起见,我使用了SimpleXMLElement。如果您需要更强大的工具,请查看DomDocument和DOMXPath。

有关SimpleXML Xpath的更多详细信息。