xmlstarlet을 사용하여 XML의 요소 값 추출

xmlstarlet을 사용하여 XML의 요소 값 추출

내 상황은 매우 구체적이고 초보자입니다.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>

어디뿌리= 넷북 태그.

질문

  1. 파일 해시가 있는데 5a43dc3524가져오고 싶습니다.~의날짜, 그건 2008-06-04 16:40. 이를 수행하는 가장 쉬운 방법은 무엇입니까?
  2. 또한, 얻는 방법은속성 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>hash5a43dc3524<file><date>

또한 파일 요소에서 속성 ID(예: 2)를 어떻게 얻을 수 있나요? 다시 말하지만, 나는 해시를 가지고 있습니다. 그게 전부입니다.

우리는 매우 비슷한 것을 할 수 있습니다:

xmlstarlet sel -t -v '//file[name/@hash="5a43dc3524"]/@id' data.xml

관련 정보