xmlstarletは選択したタグの直前にあるタグをどのように選択しますか?

xmlstarletは選択したタグの直前にあるタグをどのように選択しますか?

私は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&#xAD;te&#xAD;nant"/>
    <breakline/>
    <ITEXT CH="qu&#x2019;est ce qu&#x2019;on fait&#x202F;?"/>
    <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

うわ

関連情報