Suche und Filtern von Tags in xml-Dateien

12/10/2007 - 22:25 von Thomas Wiedmann | Report spam
Hallo,

in einem Verzeichnis befinden sich sehr viele unterschiedliche .xml-Dateien.
Ich möchte aus diesem Verzeichnis
1. diejenigen .xml-Dateien herausfiltern, die ein bestimmtes Tag enthalten
(bei einigen dieser Dateien fehlt das Tag, und das ist nicht am Dateinamen
zu erkennen) und zusàtzlich zum Dateinamen
2. zu jeder gefundenen .xml-Datei nur genau den Block ausgeben, der durch
das Tag umschlossen wird, also <tagx>textx</tagx>.

Das Problem dabei ist, daß der Inhalt der .xml-Dateien ein langer,
einzeiliger "Bandwurm" ist, in dem die Tags und ihre Inhalte
aneinandergereiht sind, also nach dem Muster:
<haupttag1><untertag1><tag1>text1</tag1><tag2>text2</tag2><tag3>text3</tag3><tag4>text4</tag4></untertag1></haupttag1>
u.s.w.

Mit welchen Statements (vorzugsweise per Bash) kann man dies erreichen?



Nebenbei (aber die o. g. Frage ist mir wichtiger):
Wie kann man eine solche Bandwurm-xml-Datei so umformatieren und in eine
neue Datei schreiben, daß die Tags nicht mehr als Bandwurm
aneinandergereiht, sondern in einer hierarchischen Struktur erscheinen, also
z. B.

<haupttag1>
<untertag1>
<tag1>text1</tag1>
<tag2>text2</tag2>
<tag3>text3</tag3>
<tag4>text4</tag4>
...
</untertag1>
</haupttag1>
?


Danke für alle guten Tips.

Thomas Wiedmann
 

Lesen sie die antworten

#1 Cyrus Kriticos
12/10/2007 - 23:52 | Warnen spam
Thomas Wiedmann wrote:

in einem Verzeichnis befinden sich sehr viele unterschiedliche
.xml-Dateien. Ich möchte aus diesem Verzeichnis
[...]
2. zu jeder gefundenen .xml-Datei nur genau den Block ausgeben, der
durch das Tag umschlossen wird, also <tagx>textx</tagx>.



Willst Du den Block ausgeben der umschlossen wird oder den Block mit den
umschließenden Tags?

Das Problem dabei ist, daß der Inhalt der .xml-Dateien ein langer,
einzeiliger "Bandwurm" ist, in dem die Tags und ihre Inhalte
aneinandergereiht sind, also nach dem Muster:
<haupttag1><untertag1><tag1>text1</tag1><tag2>text2</tag2><tag3>text3</tag3><tag4>text4</tag4></untertag1></haupttag1>
u.s.w.

Mit welchen Statements (vorzugsweise per Bash) kann man dies erreichen?



ok, mit Boardmitteln der bash:

$ TAG="untertag1"
$ read LINE < datei.txt
$ LINE="${LINE#*<$TAG>}"
$ LINE="${LINE%</$TAG>*}"
$ echo "<${TAG}>${LINE}</${TAG}>"

<untertag1><tag1>text1</tag1><tag2>text2</tag2><tag3>text3</tag3><tag4>text4</tag4></untertag1>

Best regards | "The only way to really learn scripting is to write
Cyrus | scripts." -- Advanced Bash-Scripting Guide

Ähnliche fragen