XML과 관련하여 XPath라는 기술이 있다.
막 엄청 어렵지는 않은데 몇번 두드려 봐야 손에 익는 기술이라..
XPath와 관련하여 연습문제를 제공하는 사이트가 있어 기록해둔다.
Option 1에 XML 스크립트를 써놓거나,
Option 2에 XML 파일을 업로드한 후
XPath expression에 이것저것 표현식을 넣어본 후 Evaluate로 실행한다.
XPath 연습 사이트
참고로 아래 표는 XPath의 거의 모든 것..
아래 표는 XPath에서 사용하는 주요 함수다.
<root xmlns:hol="http://www.hollywood.org/" xmlns:ota="http://www.otaku.org" xmlns:ci="http://www.citizen.org">
<us>
<presidents>
<president id="100" class="liberal" data-id="popular">Kennedy</president>
<president id="101" class="liberal">Obama</president>
<president id="102" class="conservative">Bush</president>
</presidents>
<hol:actors>
<hol:actor id="103">Liam Neeson</hol:actor>
<hol:actor id="104">Emma Watson</hol:actor>
</hol:actors>
<ci:citizens>
<ci:citizen>Liam Neeson</ci:citizen>
<ci:citizen>Emma Watson</ci:citizen>
<ci:citizen>Joe Kim</ci:citizen>
<ci:citizen>Kennedy Kim</ci:citizen>
</ci:citizens>
</us>
<!-- us means USA -->
<jp>
<ota:characters>
<ota:animeCharacter id="105" class="eva">Asuka</ota:animeCharacter>
<ota:animeCharacter id="106" class="eva">Rei</ota:animeCharacter>
<ota:animeCharacter id="107" class="onepiece">Luffy</ota:animeCharacter>
<ota:gameCharacter id="108" class="nintendo">Pikachu</ota:gameCharacter>
<ota:gameCharacter id="109" class="nintendo">Mario</ota:gameCharacter>
</ota:characters>
<singers>
<singer id="110">Aiko</singer>
<singer id="111">Aimyon</singer>
</singers>
<ci:citizens>
<ci:citizen>Sakamoto Yuri</ci:citizen>
<ci:citizen>Yamada Takeshi</ci:citizen>
</ci:citizens>
</jp>
<!-- jp means Japan -->
<ko>
<presidents>
<president id="112" class="conservative">Park Jeong Hee</president>
<president id="113" class="liberal">Kim Dae Joong</president>
<president id="114" class="liberal">Roh Mu Hyeon</president>
<president id="115" class="conservative">Lee Myeong Bak</president>
</presidents>
<hol:singers>
<hol:singer id="116">BTS</hol:singer>
<hol:singer id="117">blackpink</hol:singer>
</hol:singers>
<ci:citizens>
<ci:citizen>Kim Mi Young</ci:citizen>
<ci:citizen>Lee Sang Jun</ci:citizen>
</ci:citizens>
</ko>
<!-- ko means South Korea -->
<ch>
<ci:citizen class="chinese">Xi Jin Ping</ci:citizen>
<ci:citizen id="beijing" class="chinese">Xiao Mei</ci:citizen>
<ci:citizen id="nanjing" class="chinese">Xiao Mei</ci:citizen>
<ci:halfCitizens>
<ci:citizen class="hongkonger">Lui Wei</ci:citizen>
<ci:citizen class="hongkonger">Lui Davidson</ci:citizen>
<ci:citizen class="hongkonger">Lui Johnson</ci:citizen>
<ci:citizen class="taiwanese">Chiang Kai Shek</ci:citizen>
</ci:halfCitizens>
</ch>
<!-- ch means China -->
</root>
위 코드를 예제로 만들어 각종 문제 출제를 GPT에게 부탁했다.
몇번 해보니 금방 문법을 익혔다.
마지막 10개 묶음 문제 중 6번 문제를 제외하고 9개 문제를 맞췄다.
아래는 정답 코드..
count(/root/us//president | /root/ko//president) # 1번 문제
//ota:animeCharacter[@class="eva"][1]/text() # 2번 문제
count(/root/ch//ci:citizen[@class="chinese"]) # 3번 문제
//president[@data-id="popular"]/text() | //ota:animeCharacter[@class="onepiece"]/text() # 4번 문제
//ko//president[@class="liberal" and @id="114"] # 5번 문제
(/root/ch//ci:citizen[@class="chinese"])[last()]/text() # 6번 문제(못 품)
//jp//singer | //ch//ci:citizen # 7번 문제
count(//ci:citizen) # 8번 문제
count(//jp//president | //jp//ota:animeCharacter) # 9번 문제
//us//president[@class="liberal"] | //ch//ci:citizen[@class="hongkonger"] # 10번 문제