Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: BASH редактирование XML файла  (Прочитано 2377 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
BASH редактирование XML файла
« : 06 Февраль 2015, 18:58:19 »
Доброго


как отредактировать нужный тег через баш ?

нашел програму xmlstarlet, но видимо что-то не верно указываю

пробую изменить значение тега "to"
<note>
 <to>Tove</to>
 <from>Jani</from>
 <heading>Reminder</heading>
 <body>Don't forget me this weekend!</body>
</note>

xmlstarlet ed -u 'note/to' -v 'XXX' xml.xml

результат такой же

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #1 : 06 Февраль 2015, 23:48:40 »
а если путь задать как '/note/to'?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #2 : 07 Февраль 2015, 00:51:11 »
sed -i '/<note>/,\|</note>|s|<to>.*</to>|<to>XXX</to>|' xml.xml
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #3 : 07 Февраль 2015, 22:07:15 »
пример не удачный
вот пример на котором не работает

xmlstarlet ed -u '/project/version' -v '1.2' pom.xml
sed -i '/<project>/,\|</project>|s|<version>.*</version>|<version>1.2</version>|' pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.aw.ad</groupId>
         <artifactId>java-ad-rm</artifactId>
        <version>1.0</version>
    </parent>
        <artifactId>java-ad</artifactId>
        <packaging>jar</packaging>
        <version>1.0</version>
        <name>Java Active Directory</name>

        <properties>
                <spring.version>3.0.2.RELEASE</spring.version>
                <java.version>1.6</java.version>
        </properties>
        <build>
                <plugins>
                        <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-compiler-plugin</artifactId>
                                <configuration>
                                        <source>${java.version}</source>
                                        <target>${java.version}</target>
                                </configuration>
                        </plugin>
                </plugins>
                <finalName>javaactivedirectory</finalName>
        </build>
        <dependencies>
                <!-- Spring Dependencies -->
                <dependency>
                        <groupId>org.springframework.ldap</groupId>
                        <artifactId>spring-ldap-core</artifactId>
                        <version>1.3.1.RELEASE</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework.ldap</groupId>
                        <artifactId>spring-ldap-core-tiger</artifactId>
                        <version>1.3.1.RELEASE</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework.ldap</groupId>
                        <artifactId>spring-ldap-odm</artifactId>
                        <version>1.3.1.RELEASE</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework.ldap</groupId>
                        <artifactId>spring-ldap-ldif-core</artifactId>
                        <version>1.3.1.RELEASE</version>
                </dependency>
                <dependency>
                        <groupId>org.springframework.ldap</groupId>
                        <artifactId>spring-ldap-ldif-batch</artifactId>
                        <version>1.3.1.RELEASE</version>
                </dependency>
        </dependencies>

        <!-- Add the Spring Maven Repositories to this project -->
        <repositories>
            <repository>
                <id>spring-release</id>
                        <url>http://maven.springframework.org/release</url>
            </repository>
        </repositories>
</project>


хотя xmlstarlet структуру видет
xmlstarlet el pom.xml
project
project/modelVersion
project/parent
project/parent/groupId
project/parent/artifactId
project/parent/version
project/artifactId
project/packaging
project/version
project/name
project/properties
project/properties/spring.version
project/properties/java.version
project/build
project/build/plugins
project/build/plugins/plugin
project/build/plugins/plugin/groupId
project/build/plugins/plugin/artifactId
project/build/plugins/plugin/configuration
project/build/plugins/plugin/configuration/source
project/build/plugins/plugin/configuration/target
project/build/finalName
project/dependencies
project/dependencies/dependency
project/dependencies/dependency/groupId
project/dependencies/dependency/artifactId
project/dependencies/dependency/version
project/dependencies/dependency
project/dependencies/dependency/groupId
project/dependencies/dependency/artifactId
project/dependencies/dependency/version
project/dependencies/dependency
project/dependencies/dependency/groupId
project/dependencies/dependency/artifactId
project/dependencies/dependency/version
.....

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #4 : 09 Февраль 2015, 10:58:17 »
У кого есть соображения на данную тему ?

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #5 : 09 Февраль 2015, 12:50:41 »
xmlstarlet ed -u '/project/version' -v '1.2' pom.xml
Цитировать
...
:None of the XPaths matched; to match a node in the default namespace
use '_' as the prefix (see section 5.1 in the manual).
For instance, use /_:node instead of /node

xmlstarlet ed -u '/_:project/_:version' -v '1.2' pom.xml
Цитировать
...
<version>1.2</version>
...
Он же пишет "see section 5.1 in the manual". Я просто взял его пример "For instance, use /_:node instead of /node", но лучше посмотрите что там написано в разделе 5.1.

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #6 : 09 Февраль 2015, 13:23:35 »
хм, у меня так не ругается

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #7 : 09 Февраль 2015, 13:44:13 »
пример не удачный
вот пример на котором не работает
sed -i '/<project>/,\|</project>|s|<version>.*</version>|<version>1.2</version>|' pom.xml<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Если Вы про sed, то будьте внимательны с паттернами. В коде пишите "<project>", а в тексте "<project". Как оно дожно срабатывать? Должно быть также как в тексте (/<project/,\|</project>|s…)
« Последнее редактирование: 09 Февраль 2015, 13:46:54 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #8 : 09 Февраль 2015, 14:10:38 »
сработал для всех тегов "version" ((

надо только для
project/version
project/parent/version

Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #9 : 09 Февраль 2015, 16:15:08 »
хм, у меня так не ругается
ну значит программа меня попросила Вам передать ))
вариант '/_:project/_:version' при этом делает то что нужно?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6016
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #10 : 09 Февраль 2015, 18:15:40 »
сработал для всех тегов "version" ((

надо только для
project/version
project/parent/version
sed это не html-парсер, а текстовый редактор, он теги не определяет, только текст.
Код: Bash
  1. sed -i '/<project/,\|</project>|{/<dependencies>/,\|<dependencies>|! s|<version>.*</version>|<version>1.2</version>|' pom.xml
Код: Bash
  1. sed -i '/<project/,\|</project>|s|<version>1.0</version>|<version>1.2</version>|' pom.xml
Код: Bash
  1. sed -i '/<project/,\|</project>|s|<version>[0-9.]*</version>|<version>1.2</version>|' pom.xml
« Последнее редактирование: 09 Февраль 2015, 18:17:52 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #11 : 10 Февраль 2015, 11:06:14 »
хм, у меня так не ругается
ну значит программа меня попросила Вам передать ))
вариант '/_:project/_:version' при этом делает то что нужно?

вот тут он матюкнулся )
xmlstarlet ed -u '/_:project/_:version' -v '1.2' pom.xml>q
XPath error : Undefined namespace prefix
xmlXPathCompiledEval: evaluation failed


sed это не html-парсер, а текстовый редактор, он теги не определяет, только текст.
важен результат, инструмент пока не найден (


Оффлайн spk-ubuntu

  • Активист
  • *
  • Сообщений: 502
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #12 : 10 Февраль 2015, 17:51:58 »
вот тут он матюкнулся )
xmlstarlet ed -u '/_:project/_:version' -v '1.2' pom.xml>q
XPath error : Undefined namespace prefix
xmlXPathCompiledEval: evaluation failed
Вы откуда xmlstarlet ставили? я взял из стандартных реп:
xmlstarlet --version
Цитировать
1.5.0
compiled against libxml2 2.9.1, linked with 20901
compiled against libxslt 1.1.28, linked with 10128

Оффлайн mouserok

  • Автор темы
  • Активист
  • *
  • Сообщений: 326
    • Просмотр профиля
Re: BASH редактирование XML файла
« Ответ #13 : 11 Февраль 2015, 10:41:19 »
--select
xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t -m 'x:project/x:version' -v . pom.xml
xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t -m 'x:project/x:parent/x:version' -v . pom.xml

--change
xmlstarlet edit -N x="http://maven.apache.org/POM/4.0.0" -u '/x:project/x:parent/x:version' -v "0.0.41" pom.xml >fs

 

Страница сгенерирована за 0.151 секунд. Запросов: 24.