The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"стандартная проблема - распарсить xml именно shell-скриптом"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"стандартная проблема - распарсить xml именно shell-скриптом"  +/
Сообщение от Alting email(ok) on 22-Май-14, 14:36 
Коллеги, приветствую!
Для автоматизации перевода необходимо распотрошить strings.xml и перевести.
Для упрощения задачи - гуглоперевод с китайского на английский. Получается вполне читабельно, а ручками переводить больше тысячи строк - увольте.
Начало xml-файла такое:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="KSCSDK_UNKNOW_ERR_RUNTIME">客户端出了点问题,装个新版本再试一次吧。</string>
    <string name="KSCSDK_UNKNOW_ERR_DATA">网络连接出了点问题,一会再试一次吧。</string>
    <string name="KSCSDK_UNKNOW_ERR_NETWORK">网络连接出了点问题,一会再试一次吧。</string>
    <string name="KSCSDK_UNKNOW_ERR_SERVER">客户端出了点问题,装个新版本再试一次吧。</string>
    <string name="KSCSDK_UNKNOW_ERR_SERV_MSG">客户端出了点问题,装个新版本再试一次吧。</string>
    <string name="KSCSDK_UNKNOW_ERR_LOCAL_IO">客户端出了点问题,一会再试一次吧。</string>
    <string name="KSCSDK_UNKNOW_ERR">出了点问题,一会再试一次吧。</string>
    <string name="KSCSDK_MISS_USER_TOKEN">出了点问题,重新登陆一次就好了。</string>
    <string name="KSCSDK_NULL_PARAM">客户端出了点问题,一会再试一次吧。</string>
    <string name="KSCSDK_INVALID_PARAM">客户端出了点问题,一会再试一次吧。</string>
    <string name="KSCSDK_LIMIT_NO_SPACE">手机SD卡满了,删点东西再试一次吧。</string>
..ну и так далее.

Что мне требуется:
1. Построчно парсить файл в цикле (while read line ; do)
2. Если в строке встречается нужный признак (string name=, например) - содержимое между > и < (на китайском или смешанном языке) переводится, перевод, например, присваивается текстовой переменной.
Если не встречается - содержимое направляется в новый файл, возврат на чтение новой строки.
3. Далее текст на китайском заменяется на текст на английском, содержимое направляется в новый файл.
Задача, понятное дело, осложняется тем, что в xml файле может встретиться и такое:
    <string name="des_auth_account">"用户信息授权成功,
即将在\"%1$s\"端登录金山快盘客户端"</string>
    <string name="qrcode_login_other_device">扫描二维码</string>
т.е. часть текста строчки переносится на другую строчку. Иными словами, надо не просто строчку парсить, а все содержимое между <string name= и закрывающим тегом </string>

Буду рад любой помощи сообщества!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "стандартная проблема - распарсить xml именно shell-скриптом"  +/
Сообщение от Alting email(ok) on 22-Май-14, 15:51 
>[оверквотинг удален]
> в новый файл.
> Задача, понятное дело, осложняется тем, что в xml файле может встретиться и
> такое:
>     <string name="des_auth_account">"用户信息授权成功,
> 即将在\"%1$s\"端登录金山快盘客户端"</string>
>     <string name="qrcode_login_other_device">扫描二维码</string>
> т.е. часть текста строчки переносится на другую строчку. Иными словами, надо не
> просто строчку парсить, а все содержимое между <string name= и закрывающим
> тегом </string>
> Буду рад любой помощи сообщества!

Да, чего-то меня совсем занесло. Задача решается на три порядка проще. Прошу прощения, вопрос снят.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "стандартная проблема - распарсить xml именно shell-скриптом"  +/
Сообщение от старый сантехник on 22-Май-14, 15:58 
Мое частное мнение: парсить xml чисто средствами shell скрипта - адское занятие. Плюс правильно я понимаю, что еще и юникод нужен? Возьмите хотя бы перл что ли, там есть несколько готовых модулей для xml, выбирайте любой. Мне (опять же частное мнение) в свое время очень XML::Twig понравился.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру