0

我希望能够通过 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>

我需要能够找到Username=admin然后从同一个节点获取服务器。我将使用 PHP,您可以通过保存任何两个变量来制作示例。

4

3 回答 3

3

使用XpathDomDocument,这样的事情应该可以解决问题:

$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
}
于 2012-09-11T08:50:45.493 回答
1

此变体有效

$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;
于 2012-09-11T08:55:26.280 回答
0

尝试以下方式:

$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的更多详细信息。

于 2012-09-11T08:45:13.890 回答