2011-12-14 2 views
2

미묘한 문제가 있습니다. XML 파일을 읽을 C# 4.0 콘솔 응용 프로그램을 빌드하려고합니다.처리 명령시 XML 파일로드 및 읽기가 실패합니다.

XML 파일은 다음과 같다 :

<?xml version="1.0" encoding="UTF-8"?> 
<?xml:stylesheet type='text/xsl' href='report.xsl' version='1.0'?> 
... 
<logs> 
... 
</logs> 

을 그리고 이것은 내 코드입니다 : 이것은 Load 메서드에서 나에게 다음과 같은 오류를 제공

... 
var root = XDocument.Load(xmlStream); 

IEnumerable<XElement> address = 
    from el in root.Descendants("formated-text") 
    select el; 
... 

:

' : '문자, 16 진수 값 0x3A는 이름에 포함될 수 없습니다. 2 호선, 위치 6.

A와 두 번째 줄에 콜론 변경 '-'를 오류가 해결 ... 뜨아 내가 필요없이 원본 XML을 읽을 수있는 내 코드에서 수행 할 수있는

'어리 석음'콜론을 먼저 교체 하시겠습니까?

감사합니다.

+0

실제로 작동합니까 것을 자동으로 연구 책임자를 처리하는 브라우저에로드 할 때. 스타일 시트를 위해 나는 브라우저가 오류를 용인하는 경향이 있다고 생각하지만 오류 메시지를 넣는 것이 더 낫다는 것을 알고있다. –

+0

예, 브라우저에서 콜론이 작동한다. 슬프게도 : o ( – DeepCore

+1

XML 우리에게 처음부터 좋은 오류 메시지로 시작하는 기회를주었습니다. ( –

답변

2

없음. 그 "어리 석음 콜론"은 그 위치에서 단순히 무효입니다.

+0

이 XML 요소에 대한 유용한 단서를 제공 해줘서 고맙습니다. I 네 소스 XML 작성자가 해당 콜론에 실수를했음을 확인한이 확인. 응용 프로그램을 변경하는 데 정말로 큰 부서 (광산이 아님)를 설득 할 수있을 때까지 이미 계획 B를 구현했습니다. o ( Plan B는 스트림 리더로 XML 파일을 먼저 읽습니다. 그리고 모든 'xml :'코드를 바꾼 다음이 수정 된 파일을 내 프로세스에 입력하십시오. – DeepCore

+0

거기에 다음과 같이 입력하십시오 : -/코드 변경이 아닌 변경 요청, 승인, 릴리스 일정 ... – dash

3

잘못된 XML 문서가있는 것처럼 보입니다. 콜론 이어야합니다 (W3C). 나는 당신이 LINQ to XML을 유효하지 않은 문서로 파싱 할 수 있을지 의심 스럽다. 대신 문서를 수정해야합니다.

1

당신 XSL-스타일 시트 요소가 잘못된 참조 대시

를 사용한다, 잘못된 것입니다.

이 있어야한다 :

<?xml-stylesheet type='text/xsl' href='report.xsl' version='1.0'?> 

온라인 validators의 수에 대한 귀하의 XML의 유효성을 검사하십시오.

XML을 문자열로로드하여 문자열 구문 분석을 사용하여이 문제를 해결하거나 원본 파일을 한 줄씩 읽을 수 있으며 xml : stylsheet의 모든 내용을 텍스트 파일처럼 저장하기 전에 example, 소스를 수정하기 위해 XML을 만든 사람을 얻는 것이 낫습니다.

+0

그게 전부입니다 또한 나는 이것이 잘못된 요소라고 생각 했었습니다. 그럼에도 불구하고 나는 인터넷에서 많은 것을 보았습니다. ( 이 XML의 소스에서이 변경을 구현하려면 David vs Goliath와 같을 것입니다 파일들 ... 나는 방금 XML로부터 데이터 추출을 자동화하는 작업을 할당 받았다. – DeepCore

+0

만약 당신이 g 이 중 많은 부분을 보려고하고 변경할 수 없다면 가장 좋은 방법은 먼저 파일을 정리하는 것입니다. 따라서 파일의 내용을 문자열 (yucky) 또는 파일로 조작 할 것을 제안하십시오 줄 단위로 (더 효율적이고 모든 처리 지침 뒤에 XML이 처음 나타날 때 보석금을 낼 수 있습니다.) – dash

+0

재미있는 사실입니다. 'text/xsl'이 없기 때문에'application/xslt + xml'이 있습니다. "올바른"방법은 하나의 표준의 규칙을 따르지만 다른 것을 깨뜨리지 만, 올바른'application/xslt + xml'을 받아들이지 않습니다 : ( –

0

이러한 '잘못된 형식의'XML 파일의 출처가 1990 년대 중반으로 거슬러 올라간다는 것을 알게되었습니다 ... 예, 그런 오래된 시스템은 현재 여전히 사용되고 있으며 여전히이 출력을 생성합니다. 내 코드에서 해결 방법으로 살 수 있습니다.

이 XML 요소의 진행 상황에 대한 유용한 단서를 제공해 주셔서 감사합니다.

소스 XML 작성자가 해당 콜론을 잘못 사용했음을 확인해야했습니다.

내가 이미 큰 부서 (광산이 아님)가 자신의 응용 프로그램을 변경하도록 설득 할 수있을 때까지 이미 계획 B를 구현했습니다 ...(

플랜 B가 먼저 XML 파일을 읽고 모든 'XML을'교체하는 것입니다 O를 :. 발행 수는 그럼 내 프로세스에이 수정 된 파일을 공급