2013-10-28 3 views
-1

XML 파일을 읽고 InnerText-Strings를 저장하려고하지만 SystemNullReference 오류로 인해 충돌합니다. 나는 그것을 읽는 방법이 잘못되었다고 생각하지만 확실하지 않습니다.C#/XML 읽기 XML 파일이 작동하지 않습니다.

XML 파일 :

<?xml version="1.0" encoding="Windows-1252" standalone="no"?> 
<schema> 
    <Hintergrund>#FFFFFFFF</Hintergrund> 
    <Zahlen>#FFFFFFFF</Zahlen> 
    <Text>#FFFFFFFF</Text> 
    <Zeichenketten>#FFFFFFFF</Zeichenketten> 
    <Tags>#FF000000</Tags> 
    <Direktiven>#FF000000</Direktiven> 
    <Ausdruecke>#FF000000</Ausdruecke> 
    <Initialisierer>#FF000000</Initialisierer> 
    <Modifizierer>#FF000000</Modifizierer> 
    <Booleanische>#FF000000</Booleanische> 
    <Operator>#FF000000</Operator> 
    <Kommentare>#FF000000</Kommentare> 
</schema> 

읽기 :

foreach (XmlNode node in doc.SelectNodes("/schema/*")) 
{ 
    switch (node.Name) 
    { 
     case "Hintergrund": 
      colorBG = (Color)ColorConverter.ConvertFromString(node["Hintergrund"].InnerText); 
      break; 
     case "Zahlen": 
      colorNumbers = (Color)ColorConverter.ConvertFromString(node["Zahlen"].InnerText); 
      break; 
     case "Text": 
      colorText = (Color)ColorConverter.ConvertFromString(node["Text"].InnerText); 
      break; 
     case "Zeichenketten": 
      colorStrings = (Color)ColorConverter.ConvertFromString(node["Zeichenketten"].InnerText); 
      break; 
     case "Tags": 
      colorTags = (Color)ColorConverter.ConvertFromString(node["Tags"].InnerText); 
      break; 
     case "Direktiven": 
      colorDirectives = (Color)ColorConverter.ConvertFromString(node["Direktiven"].InnerText); 
      break; 
     case "Ausdruecke": 
      colorStatements = (Color)ColorConverter.ConvertFromString(node["Ausdruecke"].InnerText); 
      break; 
     case "Initialisierer": 
      colorInitial = (Color)ColorConverter.ConvertFromString(node["Initialisierer"].InnerText); 
      break; 
     case "Modifizierer": 
      colorModifiers = (Color)ColorConverter.ConvertFromString(node["Modifizierer"].InnerText); 
      break; 
     case "Booleanische": 
      colorBools = (Color)ColorConverter.ConvertFromString(node["Booleanische"].InnerText); 
      break; 
     case "Operator": 
      colorOperators = (Color)ColorConverter.ConvertFromString(node["Operator"].InnerText); 
      break; 
     case "Kommentare": 
      colorComments = (Color)ColorConverter.ConvertFromString(node["Kommentare"].InnerText); 
      break; 
    } 
} 

작동을하지 않습니다 이유를 알려주세요.

+2

글쎄, 어떤 라인에 문제가 있습니까? 이미 어떤 진단을 받았습니까? –

+0

switch 문이 필요합니까? 이러한 모든 요소에는 색상이 포함되어 있습니다. – Gusdor

답변

8

Text 노드 내에서 Text 등의 요소로 가져 오려고하는데 현재는 존재하지 않습니다. 또한

case "Text": 
    colorText = (Color) ColorConverter.ConvertFromString(node.InnerText); 

, 난 그냥 schema 노드 자체를 선택할 것, 사용 :

난 당신이 뭔가를 할 생각

colorText = ConvertColor(node["Text"]); 
colorBG = ConvertColor(node["Hintergrund"]); 
// etc 

ConvertColor 뭔가 같은 :

Color ConvertColor(XmlNode node) 
{ 
    return node == null ? null 
       : (Color) ColorConverter.ConvertFromString(node.InnerText); 
} 
+0

감사합니다. 그것은 작동합니다. 최대한 빨리 답변으로 표시하겠습니다. – Giraffe

0

각 요소를 읽으려면 node.InnerXml 또는 node.InnerText를 써야합니다. 엔

관련 문제