![xmlstarlet如何选择紧邻所选标签之前的标签](https://linux22.com/image/191821/xmlstarlet%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E7%B4%A7%E9%82%BB%E6%89%80%E9%80%89%E6%A0%87%E7%AD%BE%E4%B9%8B%E5%89%8D%E7%9A%84%E6%A0%87%E7%AD%BE.png)
我扫描 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­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
哇哦