내 상황은 매우 구체적이고 초보자입니다.xmlstarlet.
수백 개의 항목이 포함된 아래와 같은 XML 파일이 있습니다.
<netbooks>
<file id="2">
<date>2008-06-04 16:40</date>
<author>Daniel</author>
<name bytes="422904" hash="383a39b183">New name of - Just an example.pdf</nome>
<name bytes="383135" hash="5a43dc3524">Just an example.pdf</nome>
</file>
</netbooks>
어디뿌리= 넷북 태그.
질문
- 파일 해시가 있는데
5a43dc3524
가져오고 싶습니다.값~의날짜, 그건2008-06-04 16:40
. 이를 수행하는 가장 쉬운 방법은 무엇입니까? - 또한, 얻는 방법은속성
id
(예:2
)에서문서요소? 다시 말하지만, 나는 해시를 가지고 있습니다. 그게 전부입니다.
답변1
파일 해시 5a43dc3524가 있고 2008-06-04 16:40인 날짜 값을 가져오고 싶습니다. 이를 수행하는 가장 쉬운 방법은 무엇입니까?
xpath 표현식을 사용하여 날짜를 얻을 수 있습니다 //file[name/@hash="5a43dc3524"]/date/text()
. 파일에 data.xml
질문의 샘플 데이터가 포함되어 있다고 가정하고 다음을 실행하면:
xmlstarlet sel -t -v '//file[name/@hash="5a43dc3524"]/date/text()' data.xml
우리는 출력을 얻습니다:
2008-06-04 16:40
이 표현식 //file[name/@hash="5a43dc3524"]/date/text()
은 "속성 값이 있는 요소를 포함하는 모든 요소를 찾습니다 <file>
. 각 요소에 대해 포함된 요소의 값을 가져오고 해당 텍스트 값을 반환합니다.<name>
hash
5a43dc3524
<file>
<date>
또한 파일 요소에서 속성 ID(예: 2)를 어떻게 얻을 수 있나요? 다시 말하지만, 나는 해시를 가지고 있습니다. 그게 전부입니다.
우리는 매우 비슷한 것을 할 수 있습니다:
xmlstarlet sel -t -v '//file[name/@hash="5a43dc3524"]/@id' data.xml