XPath Parser 라이브러리

안녕하세요.

XPath를 그동안 크롤링한 HTML 문서를 파싱하는데에만 사용해왔었는데, XPath 자체를 파싱하는 것은 경험이 없어서 여쭙습니다.

예를 들어

/app/extra-notes/note[@name='1'][2]

이런 XPath가 있다면

name: app

name: extra-notes

name: note
attribute: name
attribute value: 1
array: 2

뭐 이런 식이 될 것 같습니다.

제가 알고 싶은 것은 XPath를 가지고 XML 문서를 파싱하는 것이 아니라 XPath 자체가 파싱되어 그 데이터를 얻고 싶은 것인데요. 세번째 노드의 경우에는 name은 note고, note에 대한 attribute는 name이 있으며 그 name의 값은 1이고, note라는 node안에 attribute가 name이고 그 값이 1인 노트가 여러개가 있으니 2번째 하위 노드를 선택해라. 라는 정보를 얻고 싶은 것입니다.

XPath가 다양하다보니 이걸 ChatGPT에 물어가면서 정규식으로 파싱하자니 한계가 와서 라이브러리가 있는지 궁금하여 여쭙니다.

이런 라이브러리가 있을까요?

XPathExpression를 뒤지면 나올것 같아서 살펴봤는데 사용하는 XPathParserinternal class네요. 아래 링크는 참고용으로…

https://source.dot.net/#dotnet-svcutil-lib/FrameworkFork/Microsoft.Xml/Xml/XPath/Internal/XPathParser.cs,33b569ca5ef9442f

1개의 좋아요

현재 저의 상황은 XPath를 클라이언트가 사용하는데 그것은 그냥 공인이 된 문법을 활용하자는 취지이고, 실상 XPath를 활용하여 찾는 것은 XmlDocument가 아닌 .NET 프로세스 내부의 Collection 속 객체입니다.

List에 대해 Where로 걸 수 있는 조건을 XPath에 대해 파싱된 값으로 넣으려고 하는 것인데…

이게 가능한지 모르겠습니다.

사실 정규식으로 대응해도 되지만, 매번 정규식으로 대응하기엔 쓰시는 분이 XPath 고급문법을 넣는순간 지옥이 될 것 같아서요…ㅠㅠ

아하 재밌는 아이디어네요!

1개의 좋아요

조금 더 생각해보니 XPath는 XML 문서를 쿼리하기 위한 것으로 원하시는 상황에 딱 부합할까 하는 생각이 듭니다. 여하튼…

XPath2.NetXPath2Expression을 쓸 수 있지 않을까 하는데요, 참고해보셔요.

1개의 좋아요

비슷한 것은 이미 있었군요…

감사합니다.

제 상황에 맞는지는 확인해 봐야 할 것 같은데…기본적으로 질의를 XML 데이터에 대해서 하다보니 제가 고칠 것도 꽤 많은 것 같아서 따져보겠습니다.

JsonPath를 활용할 수 도 있을 것 같습니다. (형태는 XPath랑 다르지만 유사하네요)

1개의 좋아요