문제

그래서 저는 XML을 구문 분석하려고합니다. 제작은 제 통제하에 있지 않습니다. 문제는 어떻게 든 다음과 같이 보이는 노드를 가지고 있다는 것입니다.

<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(MORNINGSTAR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(QUARTERSTAFF) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(SCYTHE) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRATNYR) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(TRIPLE-HEADED_FLAIL) />
<ID_INTERNAL_FEAT_FOCUSED_EXPERTISE_(WARAXE) />

Visual Studio와 .NET는 위에서 사용 된 '('and ')'문자가 완전히 유효하지 않다고 생각합니다. 불행히도이 파일을 처리해야합니다! XML Reader 클래스가 이러한 캐릭터를 보는 데 놀라지 않거나 동적으로 탈출하는 방법이 있습니까? 전체 파일에서 어떤 종류의 사전 처리를 할 수는 있지만 '('and ')'문자가 노드 내부에 유효한 방식으로 나타나면 모두를 제거하고 싶지 않습니다. ..

도움이 되었습니까?

해결책

그것은 단순히 유효하지 않습니다. 사전 프로세싱은 아마도 Best-Bet, 아마도 Regex와 같은 것입니다.

string output = Regex.Replace(input, @"(<\w+)\((\w+)\)([ >/])", "$1$2$3");

편집 : 괄호 안에 "-"를 대체하기 위해 조금 더 복잡합니다.

string output = Regex.Replace(input, @"(<\w+)\(([-\w]+)\)([ >/])",
    delegate(Match match) {
        return match.Groups[1].Value + match.Groups[2].Value.Replace('-', '_')
             + match.Groups[3].Value;
    });

다른 팁

구문 적으로 유효하지 않은 경우 XML이 아닙니다.

XML은 이것에 대해 매우 엄격합니다.

올바른 XML을 보내기 위해 보내는 신청서를받을 수 없다면 무엇이든 다운 스트림 프로세스는 이것을 봅니다 실패합니다, 앞으로도 당신의 것이 든 다른 앱이든.

전처리가 옵션이 아닌 경우 또 다른 영리한 메커니즘은 Stream 사용자 정의 스트림으로 구문 분석기에 전달되는 객체. 그 스트림은 찾을 수 있습니다 < 문자, 그리고 하나를 볼 때 깃발을 설정하십시오. a까지 > 캐릭터가 보이고, 먹을 수 있습니다 ( 또는 ) 캐릭터. 우리는 레거시 전송 메커니즘으로 XML 파일에 추가 된 NUL 및 ^Z 문자를 제거하기 위해 이와 같은 것을 사용했습니다. (유일한 Gotcha가있을 수 있습니다 < 속성 내부의 문자는 거기에서 탈출 할 필요가 없기 때문에 > 캐릭터는 그렇습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top