config.xml 파일이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" id="app" version="2.5" android-versionCode="20500">
<name>App title</name>
<description>Dummy dummy text.</description>
</widget>
요소의 값을 변경하고 싶습니다.
나는 다음을 시도했습니다 :
xmlstarlet edit -L -u "/_:widget/name" -v "NEW_NAME" config.xml
그리고
xmlstarlet edit -L -u "//name" -v "NEW_NAME" config.xml
그러나 "애플리케이션 제목" 값은 변경되지 않았습니다.
답변1
요소가 네임스페이스에 name
있으므로 네임스페이스를 지정해야 합니다 .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
이 명령은 제대로 작동하지만 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
이름 포트가 있는 각 항목은 값 999로 변경됩니다.
답변3
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]
)