Доступ к XML через DOM

Bartman

Новичок
Доступ к XML через DOM

Здравствуйте!
Пытаюсь получить доступ к XML документу через DOM.

Вот сам XML-документ:

<?xml version="1.0" encoding="windows-1251" ?>
<info>
<status value="900"/>
<topics>
<topic title="TEST ARTICLE" url="http://www.test.com"/>
</topics>
<additional_info>
Text1
Text2
Text3
</additional_info>
</info>

Получить доступ к элементу <status> получилось:

PHP:
$dom = domxml_open_mem($contents);
$root = $dom->document_element();
$root_child = $root->child_nodes();

for ($i = 0; $i < count($root_child); $i++)
{
   if ($root_child[$i]->node_name()=='status')
  {
   $stat = $root_child[$i]->get_attribute('value');
  }
}
Подскажите, пожалуйста, а как можно получить доступ к элементам <topic> и <additional_info>?
 

Alexandre

PHPПенсионер
$topics= $dom->get_elements_by_tagname ( "topic")
$info= $dom->get_elements_by_tagname ( "additional_info")

далее, обращаешься к $topics и $info, как к NodeSet (массив Node)
 

Bartman

Новичок
Автор оригинала: Alexandre
$topics= $dom->get_elements_by_tagname ( "topic")
$info= $dom->get_elements_by_tagname ( "additional_info")

далее, обращаешься к $topics и $info, как к NodeSet (массив Node)
Ага, спасибо! Пробую...

PHP:
function node_content($node,$attribute="content")
{
   $return = array();
   foreach($node->nodeset as $content)
   {
     $return[] = $content->{$attribute};
   }
   return $return;
}

$topics = &$dom->get_elements_by_tagname ("topic");
$xpath  = &$dom->xpath_new_context();
$xml_parsed[]  = node_content($xpath->xpath_eval("//info/topics/topic/attribute::title",$xpath),"value");	
$xml_parsed[]  = node_content($xpath->xpath_eval("//info/additional_info/text()"));
Что получилось на выходе:

PHP:
echo "<pre>";
print_r($xml_parsed);
echo "<pre>";

Array
(
    [0] => Array
        (
            [0] => TEST ARTICLE
        )

    [1] => Array
        (
            [0] => 

Text1 
Text2
Text3
        )

)
Как то так имелось ввиду надо сделать?

-~{}~ 16.03.05 14:31:

Вопрос по теме.
Если в <additional_info> внести информацию в кирилической кодировке на русском языке, например

<additional_info>
Текст1
Текст2
Текст3
</additional_info>

то в выходном массиве данные содержатся в кодировке Unicode (UTF-8). При том, что у меня в XML-документе стоит - <?xml version="1.0" encoding="windows-1251" ?>

Есть информация, что в новой версии libxml2 XML-парсер принимает в значении encoding и переводит в UTF-8 для использовании во внутреннем формате.

Подскажите, пожалуйста, как в этом случае перекодировать текст в нужный мне windows-1251?
 

Screjet

Новичок
Подскажите, пожалуйста, как в этом случае перекодировать текст в нужный мне windows-1251?
Была както подобная проблемка, решил ее пересборкой libxml2 с поддержкой iconv.
(для win) А если почитать форум XML то там советуют скачать нормальную пхп-либу.
 

Bartman

Новичок
Автор оригинала: Screjet
Была както подобная проблемка, решил ее пересборкой libxml2 с поддержкой iconv.
(для win) А если почитать форум XML то там советуют скачать нормальную пхп-либу.
2Screjet
Спасибо за совет!
У меня стоит php 4.3.10 с поддержкой библиотеки iconv (версия 1.8). Проблема решена следующим образом:

PHP:
function node_content($node, $attribute = "content")
{
  $return = array();
  foreach($node->nodeset as $content)
  {
   $return = $content->{$attribute};
  }
  return iconv('utf-8','cp1251',$return);
}
 
Сверху