xmlstarlet如何選擇緊鄰所選標籤之前的標籤

xmlstarlet如何選擇緊鄰所選標籤之前的標籤

我掃描 scribus SLA 文件並希望找到具有某些特定段落樣式的文字。 SLA 檔案格式是一種非常扁平的 XML 格式,並且連續有多個段落,每個段落都以具有段落樣式屬性的<trail/>或標籤分隔。<para/>我可以到達<StoryText>包含其中之一的對象,但我需要到達<ITEXT>緊鄰它之前的標籤,因為它的 CH 屬性包含我正在尋找的文字。

這是我如何到達包含 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

哇哦

相關內容