2016-08-08 14 views
0

xml 파일이 많은 폴더를 구문 분석하려고합니다. xml 파일에는 일부 차량에 대한 정보가 들어 있습니다. XML 파일은 자동 생성되며 일부 파일에는 잘못된 문자가 있습니다. 문제는 수동으로 수정할 수있는 파일이 너무 많다는 것입니다. 그래서 내가 어떻게 잘못된 문자 예외를 우회 할 수 있을지 궁금해? 내가 어떤 성공하지에서는 StreamReader를 사용하는 것을 시도했다해결 방법 0x01 잘못된 문자 예외입니다. Xdocument 사용하기

<ECU EcuName="ABS" EcuFamily="BSS" CplNo="&#01;" Address="0x0B" ConfigChecksum="0x00000000" Updated="false"> 

: 이는 XML 파일 중 일부에서 잘못된 라인이다. 내 코드는 다음과 같습니다.

XDocument docs = XDocument.Load(new System.IO.StreamReader((path), Encoding.GetEncoding("utf-8")));     
      var nameValues = 
       from fpc in docs.Descendants("FPC") 
       select new 
       { 
        Name = (string)fpc.Attribute("Name"), 
        Value = (string)fpc.Attribute("Value") 
       }; 
+0

무엇부터 파일을 만들었습니까? 그것을 고치는 것이 가장 좋을 것입니다. –

+0

차량을 업데이트 할 때 파일이 다른 소프트웨어 업데이트 프로그램에 의해 생성됩니다. xml 파일에는 내가 제어 할 수없는 다른 프로그램에 의해 생성 된 차량에 관한 자동 생성 정보가 들어 있습니다. @JonSkeet –

+0

그건 어색해. 당신은 각 파일을 읽을 수 있고''을 공백 문자열로 대체 할 수 있습니다. 예를 들어 ... 유일한 잘못된 문자와 그것이 발생하는 유일한 형식입니까? –

답변

1

필요한 경우 파일을로드 할 수 있습니다.

XDocument doc; 
using (XmlReader xr = XmlReader.Create(path, new XmlReaderSettings() { CheckCharacters = false })) 
{ 
    doc = XDocument.Load(xr); 
} 
// now query document here 

허용되지 않는 리터럴 문자가 아니라 표시 한 것과 같은 문자 참조로 표시됩니다.

+0

어떻게 모든 문자를 허용 할 수 있습니까 ?? –

+0

XML 스펙은 허용 된 문자를 정의하고 탭, 개행 또는 캐리지 리턴 이외의 제어 문자는 허용되지 않으므로 XML 파서로는 할 수 없습니다. 기본적으로 사용자의 입력은 올바른 형식의 XML이 아닙니다. –

+0

감사합니다. 귀하의 솔루션이 나를 위해 일했습니다! –