아래의 (잘린) XML 파일에서 프로그램 제목과 부제목을 추출하려고합니다. 나는 xmllint와 sed를 사용하여 개별적으로 압축을 풀고 하나의 파일로 결합했지만, 제목과 하위 제목이없는 가끔 항목이 있다는 것을 발견했습니다. 이 경우 하위 제목을 비워 두는 것이 좋습니다. 누군가이 불일치를 설명 할 수있는 방법을 제안 할 수 있습니까?xml 태그를 캡쳐 한 후 관련 태그가있는 경우 다음을 입력하십시오.
XML 파일
<programme start="20171013170000 +0100" stop="20171013180000 +0100" channel="b492458d826d592ec7c528545a16c757">
<title lang="eng">Accessories Gift Hall</title>
<sub-title lang="eng">Find the perfect gift with fashion accessories by some of our most sought-after brands. From chic purses and wallets to cosy PJs and slippers, there's something for everyone.</sub-title>
</programme>
<programme start="20171013180000 +0100" stop="20171014130000 +0100" channel="b492458d826d592ec7c528545a16c757">
<title lang="eng">..programmes start again at 1pm</title>
</programme>
<programme start="20171014130000 +0100" stop="20171014140000 +0100" channel="b492458d826d592ec7c528545a16c757">
<title lang="eng">Ruth Langsford's Fashion Edit</title>
<sub-title lang="eng">TV personality and QVC fashion ambassador, Ruth Langsford, shares her favourite looks and must-have pieces that will transform your wardrobe and have you looking fabulously stylish.</sub-title>
</programme>
배쉬는 V1에게
xmllint --xpath "//programme/title" xmltv | sed -r 's/\n//g' | sed 's/<\/title>/\n/g' | sed 's/<title lang="eng">//g' > 1.txt
xmllint --xpath "//programme/sub-title" xmltv | sed -r 's/\n//g' | sed 's/<\/sub-title>/\n/g' | sed 's/<sub-title lang="eng">//g' > 2.txt
paste <(cat 1.txt) <(cat 2.txt) > 3.txt
감사를 명령!
xmlstarlet이이 작업에 더 적합한 선택이라고 생각합니다. xmlstarlet 솔루션에 관심이 있으십니까? –
네, Daniel, xmlstarlet에 대해서도 들었습니다. xmlstarlet과 xmllint의 차이점이 무엇인지 잘 모릅니다. – user2679016
차이점은 xmlstarlet은 개행 문자로 각 결과 행을 표시한다는 것입니다 (xmllint의 경우는 해당되지 않음) –