мне нужно перечислить текст внутри этих двух элементов в многих pom.xml
в дереве каталогов. Файлы могут содержать элемент в других местах тоже, я ищу только содержание этих двух.печать текста внутри <project><groupId> ..</groupId> и <project><parent><groupId> ..</groupId>
В идеале, я ищу инструмент, который выводит в формате <file-name>:<line-no>:<path>:<text>
, например.
parent/pom.xml:12:/project/groupId:com.acme.project
features/persist/pom.xml:14:/project/parent/groupId:com.acme.project
features/persist/pom.xml:32:/project/groupId:com.acme.project.persist
Для следующих входных файлов:
**parent/pom/xml**
<project>
...
<groupId>
com.acme.project <!--LINE 12 -->
</groupId>
...
</project>
**feature/persist/pom.xml**
<project>
<parent>
<groupId>
com.acme.project <!--LINE 14 -->
</groupId>
</parent>
...
<groupId>
com.acme.project
</groupId>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>
a.b.c.d <!-- this is not listed in output -->
</groupId>
</dependency>
</dependencies>
</dependencyManagement>
</project>
Обратите внимание, что другие пути, такие как dependencyManagement/dependencies/dependency/groupId
не включены.
Поиск здесь на SO Я наткнулся на xmllint --xpath
и xmlstarlet, но я не знаю достаточно о xpath, чтобы понять это сам.
Пожалуйста, пост Пример входных данных, которые должны давать этот выход. –
Выход был составлен :) Но я составил соответствующий вход и добавил его –
Только что понял, что вам нужен номер строки и путь к элементу. Нет способа получить номер строки стандартным XPath/XQuery, даже в версии 3.0. По крайней мере, [Saxon имеет некоторую проприетарную поддержку для этого] (http://saxon.sourceforge.net/saxon6.5.3/extensions.html#linenumber). К пути: в XPath/XQuery 3.0 есть 'fn: path()', поэтому вам понадобится более мощный и современный процессор. Ни [xmllint], ни [xmlstartlet] не поддерживают XPath 1.0, поэтому вам понадобится другой инструмент. –