개발자 Q&A

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

2025.06.23 17:50

XMLDiffMemory::merge와 관련하여 도움을 청합니다.

목록
  • ReactNative장인 오래 전 2025.06.23 17:50 인기
  • 1,296
    1
제가 XMLDiffMemory::merge 함수를 사용하여 두 개의 XML 문서를 병합할 때, mergeTargetNode의 자식 노드가 mergeSourceNode의 자식 노드보다 많을 경우 어떻게 해야 합니까?

특히, mergeTargetNode의 자식 노드 중 중복되는 노드가 있을 때, mergeSourceNode의 자식 노드 중 중복되는 노드도 같이 병합되도록 하고 싶습니다.

이러한 경우 mergeTargetNode의 자식 노드의 순서가 바뀌는 것을 방지하고 싶습니다.

XMLDiffMemory::merge 함수의 동작 방식에 대해 설명해주시거나, 병합 시 중복 노드 처리에 대한 예제 코드를 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  오래 전



    XMLDiffMemory::merge 함수는 두 개의 XML 문서를 병합할 때, mergeTargetNode의 자식 노드가 mergeSourceNode의 자식 노드보다 많은 경우, mergeTargetNode의 자식 노드의 순서가 바뀌지 않도록 처리할 수 있습니다.

    mergeTargetNode의 자식 노드 중 중복되는 노드가 있을 때, mergeSourceNode의 자식 노드 중 중복되는 노드도 같이 병합되도록 하려면, 다음과 같이 처리할 수 있습니다.

    1. mergeTargetNode의 자식 노드 중 중복되는 노드를 식별합니다.
    2. mergeSourceNode의 자식 노드 중 중복되는 노드를 식별합니다.
    3. 중복되는 노드가 있는 경우, mergeTargetNode의 자식 노드의 순서를 유지하면서, mergeSourceNode의 자식 노드를 병합합니다.

    예제 코드는 다음과 같습니다.

    #hostingforum.kr
    cpp
    
    #include 
    
    #include 
    
    #include 
    
    #include 
    
    
    
    // XML 노드 구조
    
    struct Node {
    
        std::string name;
    
        std::vector children;
    
    };
    
    
    
    // XMLDiffMemory::merge 함수를 사용하여 두 개의 XML 문서를 병합합니다.
    
    Node merge(const Node& target, const Node& source) {
    
        // mergeTargetNode의 자식 노드 중 중복되는 노드를 식별합니다.
    
        std::map targetChildren;
    
        for (const auto& child : target.children) {
    
            targetChildren[child.name] = child;
    
        }
    
    
    
        // mergeSourceNode의 자식 노드 중 중복되는 노드를 식별합니다.
    
        std::map sourceChildren;
    
        for (const auto& child : source.children) {
    
            sourceChildren[child.name] = child;
    
        }
    
    
    
        // 중복되는 노드가 있는 경우, mergeTargetNode의 자식 노드의 순서를 유지하면서, mergeSourceNode의 자식 노드를 병합합니다.
    
        for (const auto& child : source.children) {
    
            if (targetChildren.find(child.name) != targetChildren.end()) {
    
                // 중복되는 노드가 있는 경우, mergeTargetNode의 자식 노드의 순서를 유지하면서, mergeSourceNode의 자식 노드를 병합합니다.
    
                target.children.push_back(child);
    
            } else {
    
                // 중복되지 않는 노드의 경우, mergeTargetNode의 자식 노드에 추가합니다.
    
                target.children.push_back(child);
    
            }
    
        }
    
    
    
        return target;
    
    }
    
    
    
    int main() {
    
        // 예제 XML 문서
    
        Node target = {
    
            "root",
    
            {
    
                {"child1", {}},
    
                {"child2", {}},
    
                {"child3", {}}
    
            }
    
        };
    
    
    
        Node source = {
    
            "root",
    
            {
    
                {"child2", {}},
    
                {"child4", {}},
    
                {"child5", {}}
    
            }
    
        };
    
    
    
        // 두 개의 XML 문서를 병합합니다.
    
        Node merged = merge(target, source);
    
    
    
        // 병합된 XML 문서를 출력합니다.
    
        std::cout << "병합된 XML 문서:" << std::endl;
    
        std::cout << "<" << merged.name << ">" << std::endl;
    
        for (const auto& child : merged.children) {
    
            std::cout << "  <" << child.name << ">" << std::endl;
    
            for (const auto& grandchild : child.children) {
    
                std::cout << "    <" << grandchild.name << ">" << std::endl;
    
            }
    
            std::cout << "  " << child.name << ">" << std::endl;
    
        }
    
        std::cout << "" << merged.name << ">" << std::endl;
    
    
    
        return 0;
    
    }
    
    


    이 예제 코드는 두 개의 XML 문서를 병합할 때, mergeTargetNode의 자식 노드 중 중복되는 노드가 있을 때, mergeSourceNode의 자식 노드 중 중복되는 노드도 같이 병합되도록 처리합니다. 또한, mergeTargetNode의 자식 노드의 순서가 바뀌지 않도록 처리합니다.

    2025-06-23 17:51

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

검색

게시물 검색