2016-02-05 4 views
0

мой XML структурирована следующим образом:Как получить конкретный внутренний узел с помощью SimpleXml?

<?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 узел возвращается как массив, как я могу это достичь?

ответ

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(); 
+0

Хорошо, но когда я исполню это 'если ($ user-> маркер) 'условие return false – Sandokan

+0

@Sandokan, что такое XML, который вы обрабатываете? –

+0

, когда я делаю 'print_r ($ user);' Я получаю этот контент: http://pastebin.com/xYmLiU8E – Sandokan

Смежные вопросы