xmlstarlet은 선택한 태그 바로 앞에 있는 태그를 어떻게 선택합니까?

xmlstarlet은 선택한 태그 바로 앞에 있는 태그를 어떻게 선택합니까?

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

우와

관련 정보