2013-04-08 4 views
0

XML 파일을 사전으로 구문 분석하려고합니다. 문제는 온라인에서 찾은 모든 솔루션이 이름 요소를 검색하여이를 수행하는 방법을 보여줍니다. 내 응용 프로그램 이름 요소 자체는 내가 검색하려고하는 것입니다.xml을 사전으로 구문 분석

<?xml version="1.0" encoding="UTF-8"?> 
    <calibration> 
     <ZoomLevel 250="0.0100502512562814" /> 
     <ZoomLevel 251="0.0100502512562814" /> 
     <ZoomLevel 252="0.0100502512562814" /> 
     <ZoomLevel 253="0.0100502512562814" /> 
     <ZoomLevel 254="0.0100502512562814" /> 
     <ZoomLevel 255="0.0100502512562814" /> 
     <ZoomLevel 256="0.0100502512562814" /> 
     <ZoomLevel 257="0.0100502512562814" /> 
</calibration> 

"250, 251 등"키와 값을 제거하고 사전을 만들려고합니다. 이 바보 물어하지만 C# 및 메신저 불행하게도이

+0

귀하의 XML은 유효하지 않습니다 - 250은 유효한 속성 이름이 아닙니다. (그리고 속성과 요소의 차이점에 대해서도 명확히 할 필요가 있습니다. * 요소 *는'ZoomLevel'이고, * 속성은'250 = "..."부분입니다. –

+0

키를 제거하십시오 ? 사전에 키 값 쌍의 예를 들려 주시겠습니까? – Justin

답변

3

으로 충당 어려움을 겪고있는 새로운 메신저 경우

죄송합니다 XML은 유효한 아니다. 속성 이름은 숫자에서 시작할 수 없습니다.

<?xml version="1.0" encoding="UTF-8"?> 
    <calibration> 
     <ZoomLevel _250="0.0100502512562814" /> 
     <ZoomLevel _251="0.0100502512562814" /> 
     <ZoomLevel _252="0.0100502512562814" /> 
     <ZoomLevel _253="0.0100502512562814" /> 
     <ZoomLevel _254="0.0100502512562814" /> 
     <ZoomLevel _255="0.0100502512562814" /> 
     <ZoomLevel _256="0.0100502512562814" /> 
     <ZoomLevel _257="0.0100502512562814" /> 
</calibration> 

공지 사항 _ 각 속성 명하기 전에 : 그러나

은 XML이 유효 할 때이의 그것처럼 보이는 척하게 할 수있는 방법을 표시합니다. 당신은 XML 쿼리에 다음과 같은 LINQ를 사용하여 Dictionary<int, decimal> 얻을 수 있습니다 :

var xDoc = XDocument.Load("Input.txt"); 

var dict = xDoc.Root.Elements("ZoomLevel") 
        .Select(x => x.Attributes().First()) 
        .ToDictionary(a => int.Parse(a.Name.LocalName.Substring(1)), a => (decimal)a); 

a.Name.LocalName.Substring(1)이 characted 처음 건너 뜁니다 - _ - 속성 이름에서.