Как напечатать значения из xml и записать в текстовый файл, используя: Seperator - PullRequest
0 голосов
/ 20 сентября 2018
I have a pom.xml, which i need to parse using shell to get the tag values and write it in to text file using ':' as a seperator

**XML:**
<dependency>
      <groupId>com.dtd</groupId>
      <artifactId>dtc-api-commons</artifactId>
      <version>3.3.2-SNAPSHOT</version>
</dependency>
<dependency>
      <groupId>com.dtd</groupId>
      <artifactId>dtc-api-commons</artifactId>
      <version>3.3.1_1-SNAPSHOT</version>
</dependency>
<dependency>
      <groupId>com.dtd</groupId>
      <artifactId>dtc-api-commons</artifactId>
      <version>3.3.1-SNAPSHOT</version>
</dependency>
<dependency>
      <groupId>com.dtd</groupId>
      <artifactId>dtc-api-commons</artifactId>
      <version>3.3.0-SNAPSHOT</version>
</dependency>

**Expected output:**
com.dtd:dtc-api-commons:3.3.2-SNAPSHOT
com.dtd:dtc-api-commons:3.3.1-SNAPSHOT
com.dtd:dtc-api-commons:3.3.1_1-SNAPSHOT
com.dtd:dtc-api-commons:3.3.0-SNAPSHOT

Пожалуйста, помогите мне предоставить точную команду оболочки для разбора xml и записи значений в ожидаемом формате, используя: seperator

1 Ответ

0 голосов
/ 20 сентября 2018

Предполагая, что вы вложите свой XML в корневой тег, вероятно <project> для файла POM:

<project>
    <dependency>
              <groupId>com.dtd</groupId>
              <artifactId>dtc-api-commons</artifactId>
              <version>3.3.2-SNAPSHOT</version>
    </dependency>
    <dependency>
              <groupId>com.dtd</groupId>
              <artifactId>dtc-api-commons</artifactId>
              <version>3.3.1_1-SNAPSHOT</version>
    </dependency>
    <dependency>
              <groupId>com.dtd</groupId>
              <artifactId>dtc-api-commons</artifactId>
              <version>3.3.1-SNAPSHOT</version>
    </dependency>
    <dependency>
              <groupId>com.dtd</groupId>
              <artifactId>dtc-api-commons</artifactId>
              <version>3.3.0-SNAPSHOT</version>
    </dependency>
</project>

Вы можете использовать xmlstarlet:

xmlstarlet sel -T -t -m '//project/dependency' -v 'concat(groupId,":",artifactId,":",version)' -nl pom.xml
com.dtd:dtc-api-commons:3.3.2-SNAPSHOT
com.dtd:dtc-api-commons:3.3.1_1-SNAPSHOT
com.dtd:dtc-api-commons:3.3.1-SNAPSHOT 
com.dtd:dtc-api-commons:3.3.0-SNAPSHOT

sel: выберите
-T: выводит текст
-t: шаблон
-m: соответствует xpath
-v: получить значение всех трех узлов, объединенных с :
-nl: печатает новую строку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...