2014-01-07 2 views
0

У меня есть быстрый вопрос по этому вопросу, я видел другие сообщения, и они по-прежнему не помогли в этой конкретной навигации xml, которую я пытаюсь сделать между объектами XML.SimpleXML и PHP

Выход XML выглядит следующим образом (данные удаляются, а структура есть, до сих пор):

<hashtable> 
<entry> 
    <string>+++++++1+++++++</string> 
    <hashtable> 
    <entry> 
     <string></string> 
     <string>DATA I WANT TO RETRIEVE IS HERE</string> 
    </entry> 
    <entry> 
     <string></string> 
     <boolean></boolean> 
    </entry> 
    <entry> 
     <string></string> 
     <string></string> 
    </entry> 
    </hashtable> 
    </entry> 
</hashtable> 

Я не могу за жизнь мне получить эту работу.

Я пробовал что-то похожее на $xml->entry['0']->string, и я получил строку, которую я назвал +++++++1+++++++ в приведенном выше ответе XML. Я не знаю, как добраться до того, чего я хочу, это строка, которую я обозначил DATA I WANT TO RETRIEVE IS HERE.

Мой simplexml_load_file(#) вызывается $xml;

Может ли кто-нибудь предоставить простой способ понять, как я могу получить данные в строке I, помеченной как DATA I WANT TO RETRIEVE IS HERE? Как я могу найти этот <string></string>?

+0

вы не сказали, что вы хотите сделать. просто понять это? что это'. – DavidLin

+0

Обновлена ​​последняя часть, чтобы объяснить, что я хочу делать. –

+0

Вы не сказали, как вы пытаетесь получить узел. – Dror

ответ

0

Попробуйте это, хитрость заключается в том, чтобы преобразовать объект обратно в строку, добавив «»:

 $a = "<hashtable> 
    <entry> 
     <string></string> 
     <hashtable> 
     <entry> 
      <string></string> 
      <string>DATA I WANT TO RETRIEVE IS HERE</string> 
     </entry> 
     <entry> 
      <string></string> 
      <boolean></boolean> 
     </entry> 
     <entry> 
      <string></string> 
      <string></string> 
     </entry> 
     </hashtable> 
     </entry> 
    </hashtable>"; 

    $xml = simplexml_load_string($a); 
    echo $xml->entry->hashtable->entry[0]->string[1].''; //print DATA I WANT TO RETRIEVE IS HERE 
+0

Вот и все! Итак, вот мой вопрос, не имеет ли значение исходная хэш-таблица? –

+0

Да, имя тега корня не имеет значения – DavidLin

0

Вы должны посмотреть на XPATH http://au1.php.net/manual/en/simplexmlelement.xpath.php
Что-то по линии этого:

...  
$xml = new SimpleXMLElement($string); 

$result = $xml->xpath('/hashtable/entry/hashtable/entry/string'); 

while(list(, $node) = each($result)) { 
    echo '/hashtable/entry/hashtable/entry/string: ',$node,"\n"; 
} 
... 

Обратите внимание - на XPATH используется передаст все узлы, которые соответствуют (более, чем вы рассчитывали ...)

+0

Спасибо за это! Но в том случае, если у этого есть 2 строки, перечисленные в записи, как бы получить вторую? –

+0

Вы можете использовать что-то вроде/hashtable/entry/hashtable/entry/string [2], чтобы получить второй, но это приведет к 2-мя совпадениям в предоставленном образце ... – Dror