代码之家  ›  专栏  ›  技术社区  ›  bag-man

在C#中插入XML节点并获取NullReferenceException

  •  0
  • bag-man  · 技术社区  · 13 年前

    谢谢你抽出时间来帮助我!

    我目前有两个问题,我认为是一个造成了另一个。基本上,我试图在现有的XML文件中插入一个额外的节点,然后用dataGridView中的数据填充它。以下是我试图更改的XML,我需要添加“Language”标记:

    <stentry>
      <index>28</index>
      <sid>PARAM_TITLE1</sid>
      <val>
        <en>Param 1</en>
        <es>parámetro 1</es>
        ***<Language>String<language>***
      </val>
      <params>
        <fontref>187</fontref>
        <numref>0</numref>
        <clip>FALSE</clip>
        <include>FALSE</include>
        <protected>FALSE</protected>
        <cwidth>-1</cwidth>
        <dwidth>0</dwidth>
      </params>
    </stentry>
    

    然而,我也面临着标签在其他地方使用的问题:

    <module>
      ..
      <color>
        <name>DIALOG</name>
        <val>ffd4dbee</val>
       <id>41a</id>
      </color>
      <color>
        <name>WIDGET_FILL</name>
        <val>ffc0c0c0</val>
        <id>41c</id>
     </color>
     ..
    </module>
    

    目前我正在使用此方法插入数据:

    int n = 0;
    
    XmlNodeList nodeList = xDoc.GetElementsByTagName("val");
    foreach (XmlNode node in nodeList)
    {
        if (node.OuterXml.Contains("val"))
        {
            XmlElement newElement = xDoc.CreateElement(tag);
            **string data = dataGridView1.Rows[n].Cells[3].Value.ToString();**
            XmlText txtVal = xDoc.CreateTextNode(data);
            XmlNode parent1 = node.ParentNode;
            parent1.AppendChild(newElement);
            parent1.LastChild.AppendChild(txtVal);
            n++;
        }
    }
    

    问题是,目前我在高亮显示的行上得到了一个NullReferenceException。我相信这是因为数据在需要的地方之前被放入了不正确的标签。所以当它试图将数据放入需要的地方时,值为null。但我并不是百分之百地了解这一点,所以我来寻求帮助。

    非常感谢!

    1 回复  |  直到 13 年前
        1
  •  1
  •   David M    13 年前

    如果您高亮显示的行正在抛出 NullReferenceException 那么错误的不是您的XML,而是您对中的单元格的访问 dataGridView1 。在该行上粘贴一个断点,当您碰到它时,检查链下的属性,看看 null 即将到来。这应该有助于您了解问题的确切位置。当断点位于每一行时,您可以依次将鼠标悬停在每个属性上。