Ich durchsuche Scribus-SLA-Dateien und möchte den Text mit bestimmten Absatzstilen finden. Das SLA-Dateiformat ist ein ziemlich flaches XML-Format und enthält mehrere Absätze in einer Reihe, die jeweils durch Tags mit einem Absatzstilattribut getrennt sind <trail/>
. <para/>
Ich kann das <StoryText>
Objekt erreichen, das eines davon enthält, aber ich muss das <ITEXT>
unmittelbar davor stehende Tag erreichen, da dessen CH-Attribute den gesuchten Text enthalten.
So erreiche ich den enthaltenen StoryText:
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText [para/@PARENT='SearchedStyle']" myfile.sla
Es ergibt sich beispielsweise:
<StoryText>
<DefaultStyle/>
<ITEXT CH="Et main­te­nant"/>
<breakline/>
<ITEXT CH="qu’est ce qu’on fait ?"/>
<para PARENT="SomeOtherParagraphStyle"/>
<para/>
<ITEXT CH="The Calendar"/>
<trail PARENT="SearchedStyle"/>
</StoryText>
Ich kann das auch erreichen, <trail PARENT="SearchedStyle"/>
aber wie kann ich den <ITEXT CH="The Calendar"/>
Knoten erreichen?
Antwort1
Ich bin nicht sicher, ob das die beste Lösung ist, aber so habe ich es geschafft:
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]" myfile.sla
Und um seinen CH
Attributwert zu erhalten:
xmlstarlet sel -t -v "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]/@CH" myfile.sla
Wow