私はScrivers SLAファイルをスキャンしていますが、特定の段落スタイルのテキストを探しています。 SLAファイル形式は非常に単純なXML形式であり、複数の連続した段落があり、各段落は<trail/>
段落スタイル属性を持つタグまたはタグで区切られています。これらのいずれかを含むオブジェクト<para/>
にアクセスできますが、CH属性に私が探しているテキストが含まれているため、直前のラベルに<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
うわ