2012-06-30 4 views
0

DB에서 XML 문자열이 열에 저장되어 있습니다.C#에서 XML 문자열을 비교하는 방법?

<?xml version="1.0"?> 
-<ProductAttributes xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
-<Attribute Required="false" ID="2" Name="Color"> 
<Value ID="18">Light Pink</Value> 
</Attribute> 
-<Attribute Required="false" ID="1" Name="Size"> 
<Value ID="9">XL</Value> 
</Attribute> 
</ProductAttributes> 

또 다른 XML은 다음과 같습니다 : 다음은 내 XML 구조입니다

<?xml version="1.0"?> 
-<ProductAttributes xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
-<Attribute Required="false" ID="1" Name="Size"> 
<Value ID="1">S</Value> 
</Attribute> 
-<Attribute Required="false" ID="2" Name="Color"> 
<Value ID="4">Red</Value> 
</Attribute> 
-<Attribute Required="false" ID="3" Name="Weight"> 
<Value ID="6">10gr</Value> 
</Attribute> 
</ProductAttributes> 

노트

  1. 가있을 수 있습니다 N XML 문자열의 수와 각 XML 문자열이있을 수 있습니다 m 태그 수

  2. 속성 노드의 순서가 다를 수 있습니다. 예를 들어 1st 속성에서 Id = 1은 첫 번째 속성이고 두 번째 속성에서는 Id = 1이 마지막 일 수 있습니다.

요구 사항은 이들 n 개의 XML 문자열을 비교하지 않으며 모든 문자열에 특성의 완전한 중복이 있는지 확인합니다.이 비교에서는 순서가 다를 수 있으므로 값을 고려합니다.

나를 안내하고 도와주세요.

+0

[무엇을 시도해 봤습니까?] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

답변

1

xml doc A의 모든 노드를 반복 할 수 있고 각 노드에 대해 xml doc B에서 해당 xpath를 조회 할 수 있습니다. 경로가 없거나 경로가 있지만 값이 다르면 문서는 ' 같은'.

당신은 다음과 같은 '같지 않음'으로 종료에 의해

최적화 "A에서 B에서가 아니라"거기에 아무것도 없습니다 보장하기 위해 A의 XPath를 확인, B의 모든 노드에 대해 동일한 작업을 수행해야 할 것 곧 xpath가 발견되지 않거나 값이 일치하지 않습니다.

1

XML 문자열을 비교하지 않습니다. 이를 XML 파서의 입력으로 사용하면 XML 파서로 변환 한 다음 트리에서 일치하는 요소를 검색하고 속성 목록을 비교합니다.

관련 문제