如何使用SimpleXml获取特定的内部节点?

时间:2016-02-05 17:12:09

标签: php simplexml

我的xml结构如下:

<?xml version="1.0" ?>
<user>
    <name>
        foo
    </name>
    <token>
        jfhsjfhksdjfhsjkfhksjfsdk
    </token>
    <connection>
        <host>
            localhost
        </host>
        <username>
            root
        </username>
        <dbName>
            Test
        </dbName>
        <dbPass>
            123456789
        </dbPass>
    </connection>
</user>
<user>
    ... same structure...
</user>

我制作了遍历所有xml节点的代码:

function getConString($node)
{
   $item = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "con");
   $nodes = new SimpleXMLElement($item);
   $result = $nodes[0];

   foreach($result as $item => $value)
   {
      if($item == "token")
      {
         return $value->__toString();
     }
   }
}

我想要实现的是$node等于:

jfhsjfhksdjfhsjkfhksjfsdk

connection节点作为数组返回,我怎么能实现呢?

1 个答案:

答案 0 :(得分:0)

如果您要解析的XML是您在此处发布的内容,则该内容无效,

  

XML文档必须包含一个根元素,该元素是所有其他元素的父元素:

http://www.w3schools.com/xml/xml_syntax.asp

(你的没有,解析这样的字符串失败了Exception: String could not be parsed as XML in ...)。

所以你的XML应该是:

<?xml version="1.0" ?>
<users>
    <user>
        <name>
            foo
        </name>
        <token>
            jfhsjfhksdjfhsjkfhksjfsdk
        </token>
        <connection>
            <host>
                localhost
            </host>
            <username>
                root
            </username>
            <dbName>
                Test
            </dbName>
            <dbPass>
                123456789
            </dbPass>
        </connection>
    </user>
    <user>
        ... same structure...
    </user>
</users>

而且您不需要遍历集合

// $nodes is SimpleXMLElement
$user = $nodes->user[0];
if($user->token)
   return $user->token->__toString();