xmlstarlet

30/05/2013 - 20:53 von Jan Schmidt | Report spam
Hallo Leute,

ich muss eine xml-Datei transformieren. Dazu habe ich bisher
das kurze Shell-Script verwendet.

xml sel -T -t -m '//*/text' -v '@lang' -n $IN |sort|uniq |while read i; do
xml tr ${PFAD}/xml2text.xslt -s sprache="$i" $IN >${OUT}_${i}.txt
done

Leider ist das unter Win (MSYS) extrem langsam (100 fache
Ausführungsdauer gegenüber Linux). Ich habe herausgefunden, dass das
an der Pipe-Verbindung vor dem while liegt.

Jetzt die Frage: Kann man das Konstrukt irgendwie direkt in xml
abbilden, so dass xmlstarlet sort und uniq mit erledigt?

Ich bin schon beim sort gescheitert.

Die xml-Datei sieht ungefàhr so aus.

<test>
<a>
<text lang="de"/>
</a>
<b>
<text lang="en"/>
</b>
<c>
<text lang="de"/>
</c>
</test>

Der erste Aufruf erzeugt mehrere tausend Zeilen, nach dem uniq kommen
vielleicht 5 raus.

Zur Not könnte das auch in das Stylesheet mit rein, aber da habe
ich auch keinen Plan wie das anzustellen ist. Das scheitert ja
schon daran, dass mehrere Ausgabedateien zu erzeugen sind.

Vielen Dank
jan
 

Lesen sie die antworten

#1 Holger Marzen
30/05/2013 - 20:56 | Warnen spam
["Followup-To:" nach de.comp.os.unix.apps.misc gesetzt.]
* On Thu, 30 May 2013 20:53:39 +0200, Jan Schmidt wrote:

Hallo Leute,

ich muss eine xml-Datei transformieren. Dazu habe ich bisher
das kurze Shell-Script verwendet.

xml sel -T -t -m '//*/text' -v '@lang' -n $IN |sort|uniq |while read i; do
xml tr ${PFAD}/xml2text.xslt -s sprache="$i" $IN >${OUT}_${i}.txt
done

Leider ist das unter Win (MSYS) extrem langsam (100 fache
Ausführungsdauer gegenüber Linux). Ich habe herausgefunden, dass das
an der Pipe-Verbindung vor dem while liegt.



Geht es schneller, wenn Du in jedem Schritt eine Datei erzeugst und
diese im nàchsten Schritt einliest?

Ähnliche fragen