URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9863
[ Назад ]

Исходное сообщение
"стандартная проблема - распарсить xml именно shell-скриптом"

Отправлено Alting , 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>

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


Содержание

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

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


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