【问题标题】:C#/XML Reading XML File doesnt work [closed]C#/XML 读取 XML 文件不起作用 [关闭]
【发布时间】:2013-10-28 11:25:38
【问题描述】:

我想读取 XML 文件并保存 InnerText-Strings,但它因 SystemNullReference 错误而崩溃。我认为我阅读它的方式是错误的,但我不确定。

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;
    }   
}

请告诉我为什么它不起作用。

【问题讨论】:

  • 那么哪一行失败了?您已经尝试过哪些诊断方法?
  • 这个switch语句有必要吗?所有这些元素都包含颜色。

标签: c# .net xml wpf file-io


【解决方案1】:

您当前正试图在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);
}

【讨论】:

  • 谢谢。有用。我会尽快标记为答案
【解决方案2】:

你需要编写node.InnerXml或者node.InnerText来读取每个元素

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多