Escaneo archivos SLA de scribus y deseo encontrar el texto que tenga algunos estilos de párrafo específicos. El formato de archivo SLA es un formato XML bastante plano y hay varios párrafos seguidos, cada uno de los cuales está separado por etiquetas <trail/>
o <para/>
que tienen un atributo de estilo de párrafo. Puedo alcanzar el <StoryText>
objeto que contiene uno de estos, pero necesito llegar a la etiqueta <ITEXT>
que viene inmediatamente antes porque sus atributos CH contienen el texto que estoy buscando.
Así es como llego al StoryText que lo contiene:
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText [para/@PARENT='SearchedStyle']" myfile.sla
Produce por ejemplo:
<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>
También puedo llegar al nodo <trail PARENT="SearchedStyle"/>
, pero ¿cómo puedo llegar al <ITEXT CH="The Calendar"/>
nodo?
Respuesta1
No estoy seguro de que sea la mejor solución, pero así es como logré hacerlo:
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]" myfile.sla
Y para obtener CH
el valor de su atributo:
xmlstarlet sel -t -v "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]/@CH" myfile.sla
Guau