개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.07.20 12:37

XMLDiffBase::diff 관련 질문

목록
  • 리버스엔지니어링도령 2일 전 2025.07.20 12:37
  • 31
    1
제가 XMLDiffBase::diff 함수를 사용하여 두 개의 XML 문서를 비교할 때 발생하는 문제에 대해 도움을 요청합니다.

XMLDiffBase::diff 함수에서 두 개의 XML 노드가 동일한지 비교할 때, 노드의 내용만 비교하는 것이 아니라, 노드의 속성도 비교해야 하는데, 이 경우 어떻게 해야 하나요?

예를 들어, 다음 두 개의 XML 노드를 비교할 때, 속성 'id'와 'name'도 비교해야 합니다.

노드1:
xml



  child1





노드2:
xml



  child1





이 경우, 두 노드는 동일한 속성을 가지고 있지만, 속성 'name'만 다르기 때문에 XMLDiffBase::diff 함수에서 두 노드는 동일한 것으로 판단되는 것 같습니다.

이러한 문제를 해결하기 위해, XMLDiffBase::diff 함수에서 노드의 속성을 비교할 수 있는 방법이 있는지 궁금합니다.

    댓글목록

    profile_image
    나우호스팅  2일 전



    XMLDiffBase::diff 함수에서 두 개의 XML 노드가 동일한지 비교할 때, 노드의 속성을 비교하려면 다음 방법을 사용할 수 있습니다.

    1. XML 노드의 속성을 직접 비교하는 방법: XMLDiffBase::diff 함수에서 노드의 속성을 직접 비교할 수 있습니다. 예를 들어, 다음 코드를 사용할 수 있습니다.

    #hostingforum.kr
    cpp
    
    xmlNodePtr node1 = ...; // 첫 번째 노드
    
    xmlNodePtr node2 = ...; // 두 번째 노드
    
    
    
    xmlAttr attr1 = node1->properties; // 첫 번째 노드의 속성
    
    xmlAttr attr2 = node2->properties; // 두 번째 노드의 속성
    
    
    
    // 속성 'id'와 'name'을 비교
    
    if (xmlStrcmp(attr1->name, (const xmlChar*)"id") == 0 && xmlStrcmp(attr2->name, (const xmlChar*)"id") == 0 &&
    
        xmlStrcmp(attr1->children->content, (const xmlChar*)"1") == 0 && xmlStrcmp(attr2->children->content, (const xmlChar*)"1") == 0) {
    
        // 속성 'id'가 동일한 경우
    
    } else {
    
        // 속성 'id'가 다를 경우
    
    }
    
    
    
    if (xmlStrcmp(attr1->name, (const xmlChar*)"name") == 0 && xmlStrcmp(attr2->name, (const xmlChar*)"name") == 0 &&
    
        xmlStrcmp(attr1->children->content, (const xmlChar*)"John") == 0 && xmlStrcmp(attr2->children->content, (const xmlChar*)"Jane") == 0) {
    
        // 속성 'name'이 동일한 경우
    
    } else {
    
        // 속성 'name'이 다를 경우
    
    }
    
    


    2. XML 노드의 속성을 비교하는 함수를 만들기: 위의 방법을 반복할 필요없이 XML 노드의 속성을 비교하는 함수를 만들 수 있습니다.

    #hostingforum.kr
    cpp
    
    xmlNodePtr compareNode(xmlNodePtr node1, xmlNodePtr node2) {
    
        // 속성 'id'와 'name'을 비교
    
        if (xmlStrcmp(node1->properties->name, (const xmlChar*)"id") == 0 && xmlStrcmp(node2->properties->name, (const xmlChar*)"id") == 0 &&
    
            xmlStrcmp(node1->properties->children->content, (const xmlChar*)"1") == 0 && xmlStrcmp(node2->properties->children->content, (const xmlChar*)"1") == 0) {
    
            // 속성 'id'가 동일한 경우
    
        } else {
    
            // 속성 'id'가 다를 경우
    
        }
    
    
    
        if (xmlStrcmp(node1->properties->name, (const xmlChar*)"name") == 0 && xmlStrcmp(node2->properties->name, (const xmlChar*)"name") == 0 &&
    
            xmlStrcmp(node1->properties->children->content, (const xmlChar*)"John") == 0 && xmlStrcmp(node2->properties->children->content, (const xmlChar*)"Jane") == 0) {
    
            // 속성 'name'이 동일한 경우
    
        } else {
    
            // 속성 'name'이 다를 경우
    
        }
    
    
    
        // 속성 비교 결과를 반환
    
        return node1;
    
    }
    
    


    이러한 방법을 사용하면 XMLDiffBase::diff 함수에서 노드의 속성을 비교할 수 있습니다.

    2025-07-20 12:38

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 38,208건 / 19 페이지

검색

게시물 검색