Scribus SLA ファイルをスキャンして、特定の段落スタイルを持つテキストを見つけたいと考えています。SLA ファイル形式は非常にフラットな XML 形式で、複数の段落が連続して存在し、各段落は段落スタイル属性を持つ<trail/>
またはタグで区切られています。これらのいずれかを含むオブジェクトにはアクセスできますが、その CH 属性に探しているテキストが含まれているため、その直前のタグにアクセスする必要があります。<para/>
<StoryText>
<ITEXT>
含まれる StoryText にアクセスする方法は次のとおりです。
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText [para/@PARENT='SearchedStyle']" myfile.sla
たとえば次のようになります:
<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>
にもアクセスできます<trail PARENT="SearchedStyle"/>
が、ノードにアクセスするにはどうすればいいですか<ITEXT CH="The Calendar"/>
?
答え1
これが最善の解決策かどうかはわかりませんが、私がそれを実現した方法は次のとおりです。
xmlstarlet sel -t -c "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]" myfile.sla
属性値を取得するにはCH
:
xmlstarlet sel -t -v "SCRIBUSUTF8NEW/DOCUMENT/PAGEOBJECT/StoryText/trail[@PARENT='SearchedStyle']/preceding-sibling::ITEXT[1]/@CH" myfile.sla
うわあ