Eu digitalizo arquivos SLA do scribus e desejo encontrar o texto com alguns estilos de parágrafo específicos. O formato de arquivo SLA é um formato XML bastante simples e há vários parágrafos seguidos, cada um separado por tags <trail/>
ou <para/>
com um atributo de estilo de parágrafo. Posso alcançar o <StoryText>
objeto que contém um deles, mas preciso alcançar a tag <ITEXT>
que vem imediatamente antes dele porque seus atributos CH contêm o texto que estou procurando.
Aqui está como eu alcanço o StoryText que contém:
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText [para/@PARENT='SearchedStyle']" myfile.sla
Produz por exemplo:
<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>
Também posso chegar ao nó <trail PARENT="SearchedStyle"/>
, mas como posso chegar ao <ITEXT CH="The Calendar"/>
nó?
Responder1
Não tenho certeza se é a melhor solução, mas aqui está como consegui fazer isso:
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]" myfile.sla
E para obter CH
o valor do seu atributo:
xmlstarlet sel -t -v "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]/@CH" myfile.sla
Uau