Xpoint
   [напомнить пароль]

XML и кириллица

Метки: [без меток]
2011-10-28 00:07:14 [обр] tcolonel[досье]

Всем гуру доброго здравия, подскажите как распарсить подобный xml-файл:

<?xml version="1.0" encoding="windows-1251"?>
<КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2011-10-27">
   <Классификатор>
      <Ид>df8ec1ac-a746-11dd-99cc-00110a53f401</Ид>
      <Наименование>Классификатор (Каталог источников информации)</Наименование>
   </Классификатор>
   <Каталог>
      <Ид>df8ec1ac-a746-11dd-99cc-00110a53f401</Ид>
      <Наименование>Каталог источников информации</Наименование>
      <ИсточникиИнформации>
         <ИсточникИнформации>
            <Ид>54437e01-1cfe-11de-8089-003048c7e186</Ид>
            <Наименование>Выставка " Московские берега 2009"</Наименование>
         </ИсточникИнформации>
                        .....

Пытаюсь загрузить через simplexml_load_file('file.xml'), но получаются кракозябры ...

спустя 8 часов [обр] Jared(3/26)[досье]
tcolonel[досье], предварительно конвертнуть в UTF8, выпилить encoding="windows-1251".
спустя 2 часа 28 минут [обр] tcolonel[досье]
<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.03" ДатаФормирования="2011-10-27">
   <Классификатор>
      <Ид>df8ec1ac-a746-11dd-99cc-00110a53f401</Ид>
      <Наименование>Классификатор (Каталог источников информации)</Наименование>
   </Классификатор>
   <Каталог>
      <Ид>df8ec1ac-a746-11dd-99cc-00110a53f401</Ид>
      <Наименование>Каталог источников информации</Наименование>
      <ИсточникиИнформации>
         <ИсточникИнформации>
            <Ид>54437e01-1cfe-11de-8089-003048c7e186</Ид>
            <Наименование>Выставка " Московские берега 2009"</Наименование>
         </ИсточникИнформации>

получил:

object(SimpleXMLElement)#40 (3) {
  ["@attributes"]=>
  array(2) {
    ["ВерсияСхемы"]=>
    string(4) "2.03"
    ["ДатаФормирования"]=>
    string(10) "2011-10-27"
  }
  ["Классификатор"]=>
  object(SimpleXMLElement)#42 (2) {
    ["Ид"]=>
    string(36) "df8ec1ac-a746-11dd-99cc-00110a53f401"
    ["Наименование"]=>
    string(85) "Классификатор (Каталог источников информации)"
  }

А как теперь сделать выборку?

Пробую так:

$cls = "Классификатор";
$id = "Ид";
echo '<h1>ID</h1>' . $xml->{$cls}->{$id};

Не работает ... (((

спустя 25 минут [обр] Lynn «Кофеман»(98/571)[досье]
У вас PHP-файл в какой кодировке?
спустя 35 секунд [обр] Lynn «Кофеман»(98/571)[досье]
М Перенесено из форума "Интернет::XML"
спустя 55 минут [обр] tcolonel[досье]

Lynn «Кофеман»[досье] Да-да Вы правы )))

Всем спасибо. Уже сделал с помощью костылей.

спустя 12 часов [обр] Jared(3/26)[досье]
tcolonel[досье], опишите свое костыльное решение для последующих поколений.
спустя 12 часов [обр] tcolonel[досье]
Jared[досье] Да конечно )
Задача стояла с конкретными условиями, поэтому не стал заморачиваться на всякие проверки, а взял то, что работает. Пример можно усовершенствовать проверками на libiconv, mbstring и пр ...
............
............
$xml        = simplexml_load_file('soi-win.xml');
$id         = iconv('WINDOWS-1251', 'UTF-8//IGNORE', "Ид");
$catalog    = iconv('WINDOWS-1251', 'UTF-8//IGNORE', "Каталог");
$istochniki = iconv('WINDOWS-1251', 'UTF-8//IGNORE', "ИсточникиИнформации");
$istochnik  = iconv('WINDOWS-1251', 'UTF-8//IGNORE', "ИсточникИнформации");
$name       = iconv('WINDOWS-1251', 'UTF-8//IGNORE', "Наименование");
$return = '
   <select name="' . $id . '" id="' . $id . '">
      <option value="empty"' . ($value == 'empty' ? ' selected="selected"' : '') . '> (не выбран) </option>
';
foreach($xml->{$catalog}->{$istochniki}->{$istochnik} as $v)
{
   $oid     = $v->{$id};
   $return .= '<option value="' . $oid . '"' . ($value == $oid ? ' selected="selected"' : '') . '>' . iconv('UTF-8', 'WINDOWS-1251', $v->{$name}) . '</option>';
}
$return .= '</select>';
............
............
Powered by POEM™ Engine Copyright © 2002-2005