- Чтение и редактирование XML файла,
Аноним, 15:19 , 12-Янв-19 (1)Такие вещи надо делать на нормальных скриптовых языках.
- Чтение и редактирование XML файла,
universite, 19:13 , 12-Янв-19 (3)> Такие вещи надо делать на нормальных скриптовых языках.На каких, примеры? А потом еще тянуть десятка два модулей-библиотек, чтоб нормально работать с XML файлами.
- Чтение и редактирование XML файла,
михалыч, 18:01 , 12-Янв-19 (2)xmllint --xpath '/zonelist/domain[@name="domain02.net"]/record[@type="A" and @ttl="600"]' xml-config.xmlP.S. так а чем sed не устраивает? grep subdomain01 xml-config.xml | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/1.1.1.1/'
- Чтение и редактирование XML файла,
universite, 19:18 , 12-Янв-19 (4)> xmllint --xpath '/zonelist/domain[@name="domain02.net"]/record[@type="A" and @ttl="600"]' > xml-config.xml Это работает. > P.S. так а чем sed не устраивает? Хотелась бы найти утилиту-фреймворк, чтоб не только читать XML, а и без проблем писать(изменять) значения. Тот же xmlstarlet не понимает несколько значений (record):
# xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123"]' -v 0 xml-config.xml ... <record type="A" value="123.255.255.123" ttl="600">0</record> ...
> grep subdomain01 xml-config.xml | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/1.1.1.1/'
sed -n '/<domain name="domain01.com"/,/<\/domain/p' xml-config.xml | sed '/domain="subdomain01"/s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/1.1.1.1/'
А вот тут нюанс, если поддомен subdomain01 будет у нескольких доменов, то получу несколько (чужих) IP. Поэтому, надо через xmllint сузить область обработки до нужного домена, а потом изменять через sed... Еще когда поддомен будет не subdomain01, а 2.2.2.2 (общий вид 2.2.2.2.domain01.com), тогда sed сделает замену только один раз и не в том месте...
- Чтение и редактирование XML файла,
universite, 19:22 , 12-Янв-19 (5) –1 - Чтение и редактирование XML файла,
михалыч, 06:21 , 13-Янв-19 (6)> А вот тут нюанс, если поддомен subdomain01 будет у нескольких доменов, то да что ж такое! опять эти грёбаные нюансы! нюансы, нюансы.. никуда от них, короче, нюансы, да идут они в .о.у! ну ты правильно понял, дорогой читатель - в воду! > получу несколько (чужих) IP. а вот это не надо, чужое - не трожь! > Поэтому, надо через xmllint сузить область обработки до нужного домена, а ну так в чём же дело? сужаем? сужаем! xmllint --xpath '/zonelist/domain[@name="domain01.com"]/record[@domain="subdomain01"]' xml-config.xml > потом изменять через sed... пожалуйста! xmllint --xpath '/zonelist/domain[@name="domain01.com"]/record[@domain="subdomain01"]' xml-config.xml | sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/1.1.1.1/' > Еще когда поддомен будет не subdomain01, а 2.2.2.2 (общий вид 2.2.2.2.domain01.com), тогда > sed сделает замену только один раз и не в том месте... А! Нннадо ещё сужать! (цепляем кавычки "") xmllint --xpath '/zonelist/domain[@name="domain01.com"]/record[@domain="subdomain01"]' xml-config.xml | sed 's/"\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"/"1.1.1.1"/' да, есть ещё xml_grep xml_merge xml_split ну, что ещё?
- Чтение и редактирование XML файла,
universite, 12:43 , 13-Янв-19 (9) >> Еще когда поддомен будет не subdomain01, а 2.2.2.2 (общий вид 2.2.2.2.domain01.com), тогда >> sed сделает замену только один раз и не в том месте... > А! Нннадо ещё сужать! > (цепляем кавычки "") у поддоменов тоже кавычки
domain="subdomain05" domain="2.2.2.2"
> xmllint --xpath '/zonelist/domain[@name="domain01.com"]/record[@domain="subdomain01"]' > xml-config.xml | sed 's/"\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"/"1.1.1.1"/' > да, есть ещё xml_grep xml_merge xml_split Это в каких именно пакетах? :) > ну, что ещё?
Т.е. полноценного фреймворка на все случаи c XML нет?
- Чтение и редактирование XML файла,
михалыч, 08:17 , 13-Янв-19 (7)> Хотелась бы найти утилиту-фреймворк, чтоб не только читать XML, а и без > проблем писать(изменять) значения. Тот же xmlstarlet не понимает несколько значений (record): эээ, "маладой челове-е-ек!", не пытайтесь нас обмануть! ничего искать не надо, всё уже изобретено, прекрасно понимает и работает садимся на велик и поехали? да, едем! (лирическое отступление) подозреваю, что у ТС ОС BSD и, каюсь, у меня не было xmlstarlet (xml), пришлось установить короче, я сделал за тебя домашку hint: чтобы менять нужно указывать что хотм менять, программа не телепат так работает xml ed -u '/zonelist/domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123" and @ttl="600"]/@value' -v 0 xml-config.xml и так тоже работает xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123"]/@value' -v 0 xml-config.xml а так нет xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123"]/' -v 0 xml-config.xml а так и вовсе неправильно xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123"]' -v 0 xml-config.xml подставляет в конце "0</record>" - то что и вовсе не требуется ну и с заменой в субдомене аналогично рабочие примеры xml ed -u '/zonelist/domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.255"]/@value' -v 0 xml-config.xml xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.255"]/@value' -v 0 xml-config.xml дарю http://xmlstar.sourceforge.net/doc/UG/ch04s03.html такие дела..
- Чтение и редактирование XML файла,
universite, 12:50 , 13-Янв-19 (10)>> Хотелась бы найти утилиту-фреймворк, чтоб не только читать XML, а и без >> проблем писать(изменять) значения. Тот же xmlstarlet не понимает несколько значений (record): > эээ, "маладой челове-е-ек!", не пытайтесь нас обмануть! > ничего искать не надо, всё уже изобретено, прекрасно понимает и работает shell,sed,awk есть в системе и этого достаточно. Но хочется на другом уровне абстракции. > (лирическое отступление) > xmlstarlet (xml), пришлось установить Это я уже упоминал. > короче, я сделал за тебя домашку
Не, скорее, разжевал бредовую документацию по работе с переменными. И это не домашка, а учеба в написании законченного решения. Хз, удасться ли вообще продать хоть одну лицензию :) > hint: > чтобы менять нужно указывать что хотм менять, программа не телепат это понятно. > так работает > xml ed -u '/zonelist/domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123" > and @ttl="600"]/@value' -v 0 xml-config.xml > и так тоже работает > xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.123"]/@value' > -v 0 xml-config.xml Да, понял, рабочее решение. > рабочие примеры > xml ed -u '/zonelist/domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.255"]/@value' > -v 0 xml-config.xml > xml ed -u '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.255"]/@value' > -v 0 xml-config.xml
Записал. > дарю > http://xmlstar.sourceforge.net/doc/UG/ch04s03.html ну, сравни для начала исходный XML. У меня массив загнан в аттрибут record. А в примерах жестко аттрибут-значение.
- Чтение и редактирование XML файла,
михалыч, 16:44 , 13-Янв-19 (15)> Не, скорее, разжевал бредовую документацию по работе с переменными.да ничего я не жевал, я этого "зверя" впервые вижу > И это не домашка, а учеба в написании законченного решения. но это не точно )) > Хз, удасться ли вообще продать хоть одну лицензию :) а почему нет? да всё получится, дорогу осилит идущий > ну, сравни для начала исходный XML. > У меня массив загнан в аттрибут record. > А в примерах жестко аттрибут-значение. это не важно, всё равно можно менять / переименовывать значения атрибутов, элементов
- Чтение и редактирование XML файла,
михалыч, 09:58 , 13-Янв-19 (8)хотел добавить и обновить своё сообщение, но упёрся в "Редактирование разрешено только в течении 60 минут после изначальной публикации."маловато будет! МАЛОВАТО!! ну, тогда просто сделаем ADD_NEW_POST (вместо update old post) вот такую штучку ещё возможно использовать xml sel -t -v '//domain[@name="domain02.net"]/record[@type="A" and @ttl="600"]/@value' xml-config.xml и конкретно получаем 123.255.255.125 вместо такого xml sel -t -c '//domain[@name="domain02.net"]/record[@type="A" and @ttl="600"]' xml-config.xml ну и вывод соответственно <record type="A" value="123.255.255.125" ttl="600"/> а вдруг пригодится?!
- Чтение и редактирование XML файла,
universite, 12:56 , 13-Янв-19 (11)> ну, тогда просто сделаем ADD_NEW_POST (вместо update old post) > вот такую штучку ещё возможно использовать > xml sel -t -v '//domain[@name="domain02.net"]/record[@type="A" and @ttl="600"]/@value' > xml-config.xml > и конкретно получаем 123.255.255.125 Пример понятен, но мало эффективен. Допустим есть функция change_IP_subdomain(). На входе знаем subdomain.$domain и новый IP. Нужно сначала получить ttl для subdomain.$domain Upd.
# xml sel -t -v '//domain[@name="domain01.com"]/record[@type="A" and @domain="subdomain01"]/@ttl' -n xml-config.xml 4H
Вот теперь рабочий рецепт :) P.S. Хотя, надо тестить. В данном случае значение TTL не важно, но в некоторых записях record могут быть другие важные вторичные переменные...
- Чтение и редактирование XML файла,
михалыч, 16:24 , 13-Янв-19 (13)> Вот теперь рабочий рецепт :) конечно рабочий и как раз таки эффективен можем получить то, что нас интересует xml sel -t -v '//domain[@name="domain01.com"]/record[@type="A" and @value="123.255.255.255"]/@domain' xml-config.xml получим subdomain01 xml sel -t -v '//domain[@name="domain01.com"]/record[@type="A" and @domain="subdomain01"]/@value' xml-config.xml получим 123.255.255.255 проверяем значения, сравниваем (если нужно) и меняем, опять таки если нужно > P.S. Хотя, надо тестить. В данном случае значение TTL не важно, но > в некоторых записях record могут быть другие важные вторичные переменные... я не знаю, может быть.. ))
- Чтение и редактирование XML файла,
universite, 13:09 , 13-Янв-19 (12)Еще вопрос, как работать, если встретятся case-sensative переменные? Например, TTL и ttl Есть ли у xmllint или xmlstarlet (xml) какие-то дополнительные ключичики, типа grep -i ... ?
- Чтение и редактирование XML файла,
михалыч, 16:24 , 13-Янв-19 (14)> Еще вопрос, как работать, если встретятся case-sensative переменные? > Например, TTL и ttl да всё нормально будет, TTL и ttl отличаются )) > Есть ли у xmllint или xmlstarlet (xml) какие-то дополнительные ключичики, типа grep > -i ... ? да, масса, надо начать отсюда http://xmlstar.sourceforge.net/doc/UG/index.html потом в каждом разделе, вначале http://xmlstar.sourceforge.net/doc/UG/ch04.html http://xmlstar.sourceforge.net/doc/UG/ch04s02.html http://xmlstar.sourceforge.net/doc/UG/ch04s03.html http://xmlstar.sourceforge.net/doc/UG/ch04s04.html есть много волшебных ключиков, увлекательное чтиво на ночь ну, а как тебе такое, илон маск?
- Чтение и редактирование XML файла,
universite, 17:50 , 13-Янв-19 (16)>[оверквотинг удален] >> -i ... ? > да, масса, надо начать отсюда > http://xmlstar.sourceforge.net/doc/UG/index.html > потом в каждом разделе, вначале > http://xmlstar.sourceforge.net/doc/UG/ch04.html > http://xmlstar.sourceforge.net/doc/UG/ch04s02.html > http://xmlstar.sourceforge.net/doc/UG/ch04s03.html > http://xmlstar.sourceforge.net/doc/UG/ch04s04.html > есть много волшебных ключиков, > увлекательное чтиво на ночь Чувак, ты реально тролль. 1) Документация имеет важный параметр помимо полноты - понятность-читабельность. 2) Приведенные ссылки не отвечают на вопрос выше. Пока вижу такое.
-s or --sort op xpath - sort in order (used after -m) where op is X:Y:Z, X is A - for order="ascending" X is D - for order="descending" Y is N - for data-type="numeric" Y is T - for data-type="text" Z is U - for case-order="upper-first" Z is L - for case-order="lower-first"
P.S. Часть претензий к проекту снимается, ибо в проекте нет кодеров и висит куча багов. > ну, а как тебе такое, илон маск? Он поставил на кон все, ждем, когда инвесторы его выкинут из проектов.
- Чтение и редактирование XML файла,
universite, 18:12 , 13-Янв-19 (17) > По пункту 2) кроме как sed не приходить в голову. > P.S. где бы еще про xmllint почитать примеры? > а то регэкспы вида: Про регэкспы опять актуально. Example: <?xml version="1.0"?> <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] </XPath>
- Чтение и редактирование XML файла,
Аноним, 20:01 , 14-Янв-19 (20)>[оверквотинг удален] >> P.S. где бы еще про xmllint почитать примеры? >> а то регэкспы вида: > Про регэкспы опять актуально. > > Example: > <?xml version="1.0"?> > <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> > (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] > </XPath> > И что за проблема, в чём вопрос?
- Чтение и редактирование XML файла,
universite, 21:49 , 14-Янв-19 (22)>[оверквотинг удален] >>> а то регэкспы вида: >> Про регэкспы опять актуально. >> >> Example: >> <?xml version="1.0"?> >> <XPath xmlns:n0="http://a.example.com" xmlns:n1="http://b.example"> >> (//. | //@* | //namespace::*)[ancestor-or-self::n1:elem1] >> </XPath> >> > И что за проблема, в чём вопрос?Например, что это за регэкспы "//." и "//namespace::*" // - это понятно, а что дальше?
- Чтение и редактирование XML файла,
михалыч, 13:58 , 15-Янв-19 (24)
- Чтение и редактирование XML файла,
Pahanivo, 15:54 , 14-Янв-19 (19)Афтар, а не проще изначально зоны хранить в plain test, а потом парсить регекспами? Не понимаю подобных извратов :)
- Чтение и редактирование XML файла,
universite, 21:46 , 14-Янв-19 (21) –1 > Афтар, а не проще изначально зоны хранить в plain test, а потом > парсить регекспами? > Не понимаю подобных извратов :) Не проще. Парсить пробелы, табы, переносы строк - то еще удовольствие.
- Чтение и редактирование XML файла,
Pahanivo, 11:50 , 15-Янв-19 (23)> Не проще. Парсить пробелы, табы, переносы строк - то еще удовольствие.В том же перле это все делается как два пальца об асфальт с плейном. От того мне и не понятно зачем нужно все упихать в XML - ибо имхо парсит XML регексами это настоящее извращение.
- Чтение и редактирование XML файла,
universite, 18:16 , 15-Янв-19 (25)>> Не проще. Парсить пробелы, табы, переносы строк - то еще удовольствие. > В том же перле это все делается как два пальца об асфальт > с плейном. От того мне и не понятно зачем нужно все > упихать в XML - ибо имхо парсит XML регексами это настоящее > извращение.А почему Perl? Есть еще хайповые Rust и Go!
- Чтение и редактирование XML файла,
Pahanivo, 08:10 , 16-Янв-19 (26)> А почему Perl? Есть еще хайповые Rust и Go!Потому что он как раз по это заточен. Чуть меньше чем полностью.
|