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

와우

관련 정보