나는 스크리버스 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
우와