使用PHP搜索XML

时间:2013-04-26 05:44:03

标签: php xml

我是PHP的初学者。我有一个XML文件。我想搜索具有name属性值的节点,并将其子节点的文本值存储到变量中。我怎么能用PHP代码来做。

实施例

  

<Server>
  <Server1>
  <ipaddress name="10.3.0.5">
  <username>user</username>
  <password>password</password>
  </ipaddress>
  </Server1>
  </Server>

这是我正在使用的XML文件。此XML文件中的父节点<Server>将包含许多<Server1>子节点。在此,我想在节点<username>内获取数据(当使用关键字<password>10.3.0.5节点id的属性值)进行搜索时,用户)和ipaddress(密码)分为两个不同的变量。请帮我一个很好的PHP代码。

1 个答案:

答案 0 :(得分:0)

首先让我按照我的理解重述你的问题:如果你有几个孩子的服务器元素,他们自己每个都有一个由ip地址识别的孩子,你怎么能拿出给定ip的用户名和密码地址?

如果这确实是您的问题,我相信下面的解决方案可能适合您:

<?php

// Declare which ip address you want to get more information about
$ip_address_to_find = '10.3.0.5';

// Full xml string that you need to search through (this is an imagined example. The last element in this xml is the one we're going to find)
$xml_string = '
<Server>
      <Server1>
             <ipaddress name="10.3.0.1">
                         <username>username1</username>
                         <password>password1</password>
             </ipaddress>
      </Server1>
      <Server2>
             <ipaddress name="10.3.0.2">
                         <username>username2</username>
                         <password>password2</password>
             </ipaddress>
      </Server2>
      <Server3>
             <ipaddress name="10.3.0.3">
                         <username>username3</username>
                         <password>password3</password>
             </ipaddress>
      </Server3>
      <Server4>
             <ipaddress name="10.3.0.4">
                         <username>username4</username>
                         <password>password4</password>
             </ipaddress>
      </Server4>
      <Server5>
             <ipaddress name="10.3.0.5">
                         <username>username5</username>
                         <password>password5</password>
             </ipaddress>
      </Server5>
</Server>';

// Use simplexml to make an object out of it
$xml_object = simplexml_load_string($xml_string);

// Cycle through the object until you find a match
foreach($xml_object as $server){
    if($server->ipaddress->attributes()->name == $ip_address_to_find ){
        $username = $server->ipaddress->username;
        $password = $server->ipaddress->password;
        // Now use $username and $password however you want
        // for example:
        echo 'For the server with IP address: '.$ip_address_to_find.', the username is: '.$username.', and the password is: '.$password.'.'.PHP_EOL;
    }
}
?>