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

哇哦

相关内容