Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с кодировками, Преобразование в XMLSpy 
V
    Опции темы
RockClimber
Дата 27.3.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Делаю преобразование xml с помощью XSLT, использую XMLSpy.
Исходный документ сохранен в кодировке Windows-1251, после преобразования получаются крякозябры, в заголовке - строчка <?xml version="1.0" encoding="UTF-8"?>... Я правильно понимаю, что XMLSpy русские кодировки не понимает и объяснять ему это бесполезно? И поможет ли преобразование исходного документа в кодировку utf-8? И если да, то как преобразовать?


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
RockClimber
Дата 27.3.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Проблема решена. Спасибо batigoal за ссылку на хороший ресурс.
Проблема решилась путем вставки строчки 
Код
<xsl:output method="html" encoding="UTF-8"/>
 с указанием нужной кодировки...


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
SRV
Дата 19.8.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



Есть xml-файл с тегами на русском в кодировке utf-8. Пишу запрос на РНР: 
/сотрудники/сотрудник/фамилия/text()
выдает ошибку:
Warning: DOMXPath::query() [function.DOMXPath-query]: Invalid expression
Если теги на английском, работает.
Почему не работает text()?
PM MAIL   Вверх
jsa
Дата 20.8.2008, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(SRV @  19.8.2008,  18:30 Найти цитируемый пост)
Пишу запрос на РНР: /сотрудники/сотрудник/фамилия/text()

вообще-то DOMXPath->query возвращает экземпляр DOMNodeList, а ни как не String


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
SRV
Дата 20.8.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



$domxpath = new domXpath($doc);
$query = "/сотрудники/сотрудник/фамилия/text()";
$list = $domxpath->query($query);
echo "Фамилии всех сотрудников: <br>";

foreach($list as $node)
    echo "$node->nodeValue <br>";


ошибка:
Warning: DOMXPath::query() [function.DOMXPath-query]: Invalid expression

$domxpath = new domXpath($doc);
$query = "/сотрудники/сотрудник/фамилия"; //без text()
$list = $domxpath->query($query);
echo "Фамилии всех сотрудников: <br>";

foreach($list as $node)
    echo "$node->nodeValue <br>";


Работает.

Добавлено через 11 минут и 22 секунды
но в этом случае, не работали предикаты

переименовал в xml корень с <сотрудники> на <personal>, всё нормально!

$domxpath = new domXpath($doc);
$query = "/personal/сотрудник/фамилия/text()";
$list = $domxpath->query($query);
echo "Фамилии всех сотрудников: <br>";

foreach($list as $node)
    echo "$node->nodeValue <br>";


Предикаты тоже работают. Вот так.

Почему не работало с "русским корнем" (все файлы в utf-8)?

Заранее спасибо.
PM MAIL   Вверх
jsa
Дата 20.8.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



xml в студию (который на русском конечно)


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
SRV
Дата 20.8.2008, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



<?xml version='1.0'?>
<сотрудники>
    <сотрудник номер="1">
        <фамилия>Андреев</фамилия>
        <имя>Роман</имя>
        <отчество>Петрович</отчество>
        <пол>М</пол>
        <год-рождения>1975</год-рождения>
        <семейное-положение>женат</семейное-положение>
        <дети>
            <фамилия>Андреев</фамилия>
            <имя>Иван</имя>
            <отчество>Романович</отчество>
            <пол>M</пол>
            <год-рождения>2000</год-рождения>
        
            <фамилия>Андреева</фамилия>
            <имя>Анна</имя>
            <отчество>Романовна</отчество>
            <пол>Ж</пол>
            <год-рождения>2003</год-рождения>
        </дети>
        <штатный>Да</штатный>
        <должность>Программист</должность>
    </сотрудник>

    <сотрудник номер="2">
        <фамилия>Попов</фамилия>
        <имя>Дмитрий</имя>
        <отчество>Алексеевич</отчество>
        <пол>М</пол>
        <год-рождения>1970</год-рождения>
        <семейное-положение>женат</семейное-положение>
        <дети>
            <фамилия>Попов</фамилия>
            <имя>Андрей</имя>
            <отчество>Дмитриевич</отчество>
            <пол>М</пол>
            <год-рождения>1993</год-рождения>
        </дети>
        <штатный>Нет</штатный>
        <должность>Программист</должность>
    </сотрудник>

    <сотрудник номер="3">
        <фамилия>Иванов</фамилия>
        <имя>Дмитрий</имя>
        <отчество>Сергеевич</отчество>
        <пол>М</пол>
        <год-рождения>1985</год-рождения>
        <семейное-положение>не женат</семейное-положение>
        <штатный>Нет</штатный>
        <должность>Программист</должность>
    </сотрудник>

    <сотрудник номер="4">
        <фамилия>Сидорова</фамилия>
        <имя>Татьяна</имя>
        <отчество>Сергеевна</отчество>
        <пол>Ж</пол>
        <год-рождения>1980</год-рождения>
        <семейное-положение>замужем</семейное-положение>
        <дети>
            <фамилия>Сидорова</фамилия>
            <имя>Мария</имя>
            <отчество>Ивановна</отчество>
            <пол>Ж</пол>
            <год-рождения>2001</год-рождения>
        </дети>
        <штатный>Да</штатный>
        <должность>Дизайнер</должность>
    </сотрудник>

    <сотрудник номер="5">
        <фамилия>Семенов</фамилия>
        <имя>Сергей</имя>
        <отчество>Иванович</отчество>
        <пол>М</пол>
        <год-рождения>1979</год-рождения>
        <семейное-положение>разведен</семейное-положение>
        <дети>
            <фамилия>Семенов</фамилия>
            <имя>Сергей</имя>
            <отчество>Сергеевич</отчество>
            <пол>М</пол>
            <год-рождения>1994</год-рождения>
        </дети>
        <штатный>Нет</штатный>
        <должность>Дизайнер</должность>
    </сотрудник>
    
    <сотрудник номер="6">
        <фамилия>Морозова</фамилия>
        <имя>Инна</имя>
        <отчество>Сергеевна</отчество>
        <пол>Ж</пол>
        <год-рождения>1985</год-рождения>
        <семейное-положение>замужем</семейное-положение>
        <штатный>Да</штатный>
        <должность>Дизайнер</должность>
    </сотрудник>
</сотрудники>
PM MAIL   Вверх
jsa
Дата 20.8.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Код

<?php

    $doc = new DOMDocument('1.0', 'utf-8');
    
    $doc->load('data.xml');
    
    $domxpath = new DOMXpath($doc);
    $query = "/сотрудники/сотрудник/фамилия"; //строка в utf-8 !!!
    $list = $domxpath->query($query);
    echo "Фамилии всех сотрудников: <br>";

    foreach($list as $node){
        echo "$node->nodeValue <br>";
    }
    
?>


вывод
Код

Фамилии всех сотрудников: 
Андреев 
Попов 
Иванов 
Сидорова 
Семенов 
Морозова


все работает, проверяй у себя кодировку


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
SRV
Дата 20.8.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



у меня так тоже работало.

попробуй такой запрос:

$query = "/personal/сотрудник[пол = 'Ж']/фамилия/text()"

Добавлено через 12 минут и 56 секунд
или напиши другой, чтобы отобрать всех сотрудников девушек
PM MAIL   Вверх
jsa
Дата 20.8.2008, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Код

$query = "//сотрудник/фамилия[following-sibling::пол[. = 'Ж']]";



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
SRV
Дата 20.8.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



так:
$query = "//сотрудник/фамилия[following-sibling::пол[. = 'Ж']]";
работает, а так:
$query = "/сотрудники/сотрудник/фамилия[following-sibling::пол[. = 'Ж']]";
нет

Почему не знаешь?
PM MAIL   Вверх
jsa
Дата 20.8.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 3
Всего: 20



Цитата(SRV @  20.8.2008,  17:02 Найти цитируемый пост)
Почему не знаешь?

нет

Добавлено через 9 минут и 28 секунд
Цитата(SRV @  20.8.2008,  17:02 Найти цитируемый пост)
, а так:$query = "/сотрудники/сотрудник/фамилия[following-sibling::пол[. = 'Ж']]";нет

можно заменить на 
Код

$domxpath = new DOMXpath($doc);
$query = "сотрудник/фамилия[following-sibling::пол[. = 'Ж']]";
$list = $domxpath->query($query, $doc->documentElement);



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
SRV
Дата 21.8.2008, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 19.8.2008

Репутация: нет
Всего: нет



Спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

Прежде чем опубликовать вопрос, попробуйте воспользоваться поиском - возможно тема уже поднималась.

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.