pugixml – 네이티브 XPATH 지원으로 효율적인 XML 파싱
요약
이 문서에서는 XML 데이터를 처리하기 위해 pugixml을 사용하는 방법을 설명합니다. 이 처리 라이브러리를 사용하면 DOM 파서로 노드를 읽고 조작하고, XPATH 표기법으로 노드를 쿼리할 수 있습니다.
빌드 방법
소스를 빌드하려면 https://github.com/zeux/pugixml/tags에서 릴리스를 다운로드해야 합니다. 이제 Phoenix Contact에서 제공하는 PLCnext 툴체인으로 소스를 교차 컴파일할 수 있습니다. 다음 코드 스니펫은 교차 컴파일을 위한 cmake 스크립트를 보여줍니다.
# 필요에 따라 환경 변수 설정
cmake \
-G "Unix Makefiles" \
-D CMAKE_BUILD_TYPE=Release \
-D BUILD_TESTING=OFF \
-D BUILD_SHARED_LIBS=ON \
-D "CMAKE_STAGING_PREFIX=${CMAKE_STAGING_PREFIX}" \
-D "CMAKE_INSTALL_PREFIX=${CMAKE_STAGING_PREFIX}" \
-D "CMAKE_TOOLCHAIN_FILE=${ARP_TOOLCHAIN_FILE}" \
-D "ARP_TOOLCHAIN_ROOT= ${ARP_TOOLCHAIN_ROOT}" \
-D BUILD_TESTS=OFF \
-S "${SOURCE_DIRECTORY}" \
-B "${BUILD_DIRECTORY}"
cmake --build "${BUILD_DIRECTORY}" --target install
사용 방법
먼저 C++ 헤더와 라이브러리를 프로젝트 환경에 통합해야 합니다. 완료되면 pugixml 처리를 사용할 수 있습니다.
문서 로드
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("data.xml");
...
주어진 노드에서 하위 노드 순회
DOM 트리를 통해 순회할 수 있으며 노드를 조작할 수도 있습니다.
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
// 하위 노드 순회
for (pugi::xml_node tool: tools) {
std::cout << " " << tool.name();
// 속성 가져오기
for (pugi::xml_attribute attr: tool.attributes()) {
std::cout << " " << attr.name() << "=" << attr.value();
}
}
XPATH 사용
XPATH는 노드와 속성에 매우 쉽게 접근할 수 있는 자유를 줍니다.
// 노드 접근
pugi::xpath_node_set tools = doc.select_nodes("/Profile/Tools/Tool");
pugi::xpath_node_set all_tools = doc.select_nodes("//Tool");
// 속성 접근
auto docIdNode = doc.select_node("@ID");
auto docIdNode_One = doc.select_node("//Tool[@ID==1]");
XML 문서 저장
XML 문서를 저장할 수 있습니다.
doc.save_file("new_data.xml");
추가 정보
pugixml에 대한 더 많은 정보에 관심이 있으시면 다음 링크를 확인하세요:
- GitHub: https://github.com/zeux/pugixml
- 웹사이트: https://pugixml.org/
라이선스
이 라이브러리는 MIT 라이선스로 배포됩니다.