Formatting XML file to read in terminal

95 views Asked by At

I'm trying to read a XML file as a text in termux terminal (just like cat). The XML file is this:

<?xml version="1.0" encoding="UTF-8"?>

<book name="2ª João" abbrev="2jo" chapters="1">

  <chapter number="1">

    <verse number="1">O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade —</verse>

    <verse number="2">por causa da verdade que permanece em nós e estará conosco para sempre.</verse>

    <verse number="3">A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor.</verse>

There's books, chapters and verses. I want to print a whole chapter at once.

I'm using mikefarah/yq implementation

So I run: yq -p xml '.book.chapter' < nvi-2jo.xml

Which returns:

+@number: "1"

verse:

  - +content: O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade —

    +@number: "1"

  - +content: por causa da verdade que permanece em nós e estará conosco para sempre.

    +@number: "2"

  - +content: A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor.

I want to get rid of this "+@number:" and "+content" and print only the text.

Desired output:

''' O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade — por causa da verdade que permanece em nós e estará conosco para sempre. A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor. '''

1

There are 1 answers

0
pmf On BEST ANSWER

The levels of your XML are book -> chapter -> verse. With .book.chapter you only go down to chapter. Go further into .verse, and iterate over its items with []. These items contain a number attribute and a text node as content. You get both, type-marked, as fields of a map. If you only want the text nodes, descend once more, into +content:

yq -p xml '.book.chapter.verse[].+content' < nvi-2jo.xml
O presbítero à senhora eleita e aos seus filhos, a quem amo na verdade, — e não apenas eu os amo, mas também todos os que conhecem a verdade —
por causa da verdade que permanece em nós e estará conosco para sempre.
A graça, a misericórdia e a paz da parte de Deus Pai e de Jesus Cristo, seu Filho, estarão conosco em verdade e em amor.