0

感谢您抽出宝贵的时间来帮助我!

我目前有两个问题,我认为一个导致另一个。基本上我试图在现有的 XML 文件中插入一个额外的节点,然后用来自 dataGridView 的数据填充它。这是我要更改的 XML,我需要添加“语言”标签:

<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 。我相信这是因为在需要的位置之前将数据放入了不正确的标签中。因此,当它尝试将数据放在需要的地方时,该值为空。但是我不是100%的,所以我来寻求帮助。

非常感谢!

4

1 回答 1

1

如果您突出显示的行抛出 aNullReferenceException则不是您的 XML 有问题,而是您访问dataGridView1. 在该行上放置一个断点,当你点击它时,检查链下的属性以查看它的null位置。这应该可以帮助您了解确切的问题出在哪里。当断点位于该行时,您可以通过依次将鼠标悬停在每个属性上来执行此操作。

于 2012-08-17T11:55:30.083 回答