2010-08-04 4 views
0

웹 서비스 호출에서받은 문자열로받은 XMl 문서를 구문 분석하려고합니다. XmlReader는 이스케이프 처리되지 않은 & s로 문서 읽기

String content = ...;//long xml document 
using(TextReader reader = new StringReader(content)) 
using(XmlReader xml_reader = XmlReader.Create(reader, settings)) 
{ 
    XML = new XPathDocument(xml_reader); 
} 

그러나 나는 예외가 얻을 : 그러나 20 ~ 30 문자 이전의 나는 것으로 나타났습니다,

An error occurred while parsing EntityName. Line 1, position 1721. 

내가 그 문자 주변의 문서를보고하고 임의의 태그의 한가운데에 있었다가 이스케이프 처리되지 않은 앰퍼샌드 (& 자)이므로 문제가 있다고 생각합니다.

실행 :

content.Substring(1700, 100);//results in the following text 
"alue>1 time per day& with^honey~&water\\\\</Value></Frequency></Direction>   </Directions>  " 
        ^unescaped & char 1721 is the 'w' 

어떻게 성공적으로 XML로이 문서를 읽을 수 있습니까?

+0

이 XMI 공급자에게 버그로 신고하십시오. 이 코드를 생성하는 코드는 잘못되었으므로 수정해야합니다. –

답변

1

귀하의 xml 인코딩이 해당 문서의 상단 (예 : <?xml version="1.0" encoding="ISO-8859-9"?>)과 일치하는지 확인하십시오. 그

  1. 작동하지 않는 경우

    using(XmlReader r = XmlReader.Create(new StreamReader(fileName, Encoding.GetEncoding(webserviceEncoding)))) { 
        XML = new XPathDocument(r); 
        // ... 
    } 
    

    아래 webserviceEncoding에 대한 웹 서비스의 XML 문서에서 값을 대체하기 전에

  2. 통지 XML 파서에로드에 문자열로 교체 웹 서비스 공급 업체
+0

그냥 할 content.replace ("&", "&")? 아마도 문서의 다른 부분을 망쳐 놓지 않을까요? – luke

+0

@luke 나는 그것을 대체하지 않을 것이다. 그 하나의 인스턴스 만 바꾸면됩니다. 또는 값 태그의 모든 내용을 수동으로 (정규식으로) 조사하여 위생적으로 처리 할 수 ​​있습니다. –

+0

xml 공급자에게 알리는 것이 올바른 해결책 이었기 때문에 수표를받습니다. 때때로 솔루션을 함께 해킹하지 않는 것이 가장 좋습니다. – luke

관련 문제