Получить содержимое тега - PullRequest
2 голосов
/ 19 апреля 2011

У меня есть следующая структура XML

<description>
    <category id="HBLMENEURSPALGA" order="83500">Spa. Handball Liga Asobal
    </category>
    AMAYA Sport San Antonio - C.BM.Torrevieja
</description>  

И со следующим кодом я получаю

Spa.Гандбол Лига Asobal AMAYA Sport San Antonio - C.BM.Torrevieja

, но я хочу только это:

AMAYA Sport San Antonio - C.BM.Torrevieja

$teams  =   $game->getElementsByTagName("description");
               foreach ($teams as $team)
               {
                     $info      =   $team->nodeValue;
               }

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Вам нужно указать на правый узел. Этот узел, на который вы указываете, фактически является целым description узлом, в то время как вам нужно указать на (неявный) текстовый узел, содержащий нужную вам строку.

Решение (при условии, что строка всегда идет последней):

$teams = $xml->getElementsByTagName("description");
foreach ($teams as $team)
{
    $info = $team->lastChild->nodeValue;
    echo "info: $info\n";
}
0 голосов
/ 19 апреля 2011

Вам нужно зациклить childNodes из $team и проверить, если nodeType == XML_TEXT_NODE

foreach ($teams as $team)
  {
    foreach($team->childNodes as $child)
      {
         if ($child->nodeType == XML_TEXT_NODE && trim($child->nodeValue) != '')
           {
             $info = $child->nodeValue;
             break;
           }
      }
  }

это потому, что текст также является узлом (, таким образом, необходимо зациклить childNodes ), который имеет значение nodeType XML_TEXT_NODE (3)

Я также проверяю, что nodeValue не является пустым, потому что пробел между узлами также может рассматриваться как textNodes ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...