2009-09-10 5 views
0

내 응용 프로그램에서 사용하는 파일 형식은 XML 기반입니다. 방금 XML 파일이 손상된 고객이 있습니다. 그 물건에는 거의 90,000 개의 줄이 포함되어 있으며 어떤 이유로 20 "="기호가 무작위로 산재되어 있습니다.C#에서 XML 복구

줄 번호와 char 위치를 가진 대부분의 경우 XmlException이 발생합니다. 이로 인해 잘못된 문자를 찾아 수동으로 제거 할 수 있습니다. 방금이 프로세스를 자동화하는 작은 응용 프로그램을 작성하기 시작했지만 손상된 XML 파일을 복구하는 더 좋은 방법이 있는지 궁금합니다. 어설픈 라인의

예 :

<item name="InstanceGuid" typ=e_name="gh_guid" type_code="9">ee330f9f-a1e2-451a-8c6d-723f066a6bd4</item> 
          ↑ (this is supposed to be [type_name]) 

답변

1

당신은 따옴표 뒤에되지 않은 등호를 검색 할 수 있습니다. 정규 표현식 (정규 표현식)은 매우 간단하게 작성할 수 있습니다.

또는 고급 텍스트 편집기에서 파일을 열고 동일한 정규 표현식으로 검색하고 바꾸기/제거 할 수 있습니다. 일부 텍스트 편집기를 사용하면 정규식을 사용하여 찾기/바꾸기가 가능하므로 큰 따옴표가없는 등호를 검색하여 제거 할 수 있습니다. 물론

, I 등

+0

감사 짐,이 대부분의 오류를 발견 할 것이다 될 것이다 = "테스트"일반 = ENAME = "테스트"

유형 이름. –

1

를 사용하여, 당신이 엉망을 수도 다음 내부 XML에 등호가 있다면 이후 처음으로 XML을 청소하는 정규 표현식을 원본의 사본을 보관 것입니다.

무엇인가 :

s/([^\s"]+)=([^\s"]+="[^"]*")/\1\2/ 

는 분명히 이것은 선택 : 당신의 정규식 엔진에 포팅 될 필요가

TextPad를에서
+0

감사합니다. OJ, 점점 더 많은 문제가 RegEx에 의해 해결 될 수 있습니다. –

+0

위의 진술을 신중하게 적용하는 것이 좋습니다. ;) – TrueWill

+0

의심의 여지가 없습니다. 목표는 생산 품질 구현이 아니라 아이디어를 제공하는 것이 었습니다. 따라서 "뭔가 같은"진술 :) –

1

는 [^ "] 찾을 것 = 정규 표현식을 사용하여 검색하는 경우 any = 뒤에 부호가 없음 "

이것은 문서에서 불량 = 기호가 표시된 위치를 찾아야합니다. 텍스트를 바꾸려면 먼저 문서를 TextPad에서 엽니 다. 그런 다음 F8 키를 누릅니다. 대화 상자에서

다음을 입력 :

찾기 무엇 : = \ ([^ "] \)

을 교체 : \ 1

이 확인"정규 표현식 "상자를 선택" "모든 문서"를 클릭 한 다음 "모두 바꾸기"를 클릭하십시오.

다음은 "="다음에 "="기호가 뒤 따르는 기호와 일치해야합니다.

유형 이름은 = "테스트"유형 이름 = "테스트"