xpath - print text inside <project><groupId>..</groupId> and <project><parent><groupId>..</groupId> -
i need list text inside these 2 elements in many pom.xml in directory tree. files may contain element @ other places too, looking content of these two.
ideally, looking tool outputs in format <file-name>:<line-no>:<path>:<text>, e.g.
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 for following input files:
**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 <!-- not listed in output --> </groupid> </dependency> </dependencies> </dependencymanagement> </project> note other paths such dependencymanagement/dependencies/dependency/groupid not included.
searching here on came across xmllint --xpath , xmlstarlet don't know enough xpath figure out myself.
try xpath 2.0 compatible query without line numbers, checks query paths matching <groupid/> elements , prints document name, constructs (not unique) path , adds contents of element.
(//project/parent | //project)/groupid/string-join( ( base-uri(), string-join(('', .//ancestor-or-self::*/name()), '/'), data(.) ), ':') you run using basex collection example (like did testing), contains xml files want query.
- run command create collection:
create db xmldocs /path/to/xml-files - query database using above xpath
there different ways run query, have @ standalone mode manual.
the query should run in other xpath 2.0 compatible engines saxon (which support line numbers, see comment above).
Comments
Post a Comment