Обновление XML оценивает с xmlstarlet

[1122808] Нет, кошка, несомненно, лучший способ сделать это. Зачем использовать для этого питон, если есть программа, уже написанная на Си? Однако, Однако вы можете рассмотреть возможность использования [1123284]xargs[1123285] в случае, если длина командной строки превышает [1123286]ARG_MAX[1123287] и вам нужно более одного [1123288]cat[1123289]. Используя инструменты GNU, это эквивалентно тому, что у вас уже есть:

2
23.11.2014, 22:45
3 ответа

необходимо указать пространство имен начиная с имя , элемент находится в http://www.w3.org/ns/widgets пространство имен:

xmlstarlet edit -L -N w=http://www.w3.org/ns/widgets -u "//w:name" -v "NEW_NAME" config.xml
2
27.01.2020, 22:13

Эта команда работает нормально, но изменяет каждую запись в XML-файле. (все поля с именем)

Что вводить, если есть другие поля с одно и то же имя. Я пробовал:

xml ed -L -N w=http://artifactory.jfrog.org/xsd/1.7.9 -u "//w:mailServer/port" -v "123" artifactory.config.import.xml

, но ничего не происходит. Однако команда принята.

Когда я использую

xml ed -L -N w=http://artifactory.jfrog.org/xsd/1.7.9 -u "//w:port" -v "999" artifactory.config.import.xml 

, каждый элемент с именем port изменяется на значение 999.

0
27.01.2020, 22:13

Является ли perl вариантом? Если да, то я бы предложил его - отличная библиотека XML::Twig позволяет быстро решить большинство проблем с разбором XML. Включая редактирование на месте:

#!/usr/bin/env perl
use strict;
use warnings;

use XML::Twig; 

sub set_name {
    my ( $twig, $element ) = @_;
    $element -> set_text ('A NEW NAME'); 
    $twig -> flush;
}

my $twig = XML::Twig -> new ( pretty_print => 'indented', twig_handlers => { 'name' => \&set_name } );
$twig -> parsefile_inplace('config.xml');

(Вы можете передать ей имя файла в командной строке, используя $ARGV[0])

0
27.01.2020, 22:13

Теги

Похожие вопросы