1

早上好。

不久。

使用XmlDocument我正在编程创建文档,它需要看起来像这样(示例):

<report>
    <header version="1" reportDate="2013-08-27" salesDate="2013-08-26"/>
    <data>
        <companies>
            <company id="ABCD">
                <customers>
                    <customer id="100000" storeId="AA"/>
                    <customer id="100001" storeId="AB"/>
                    <customer id="100002" storeId="AC"/>
                </customers>
            </company>
        </companies>
    </data>
</report>

我需要从几个DataGridView中获取数据,以便大量使用foreach循环。

我无法解决也找不到答案(总是关于阅读 XML,没有创建)是下面显示的代码抛出我的原因:

你调用的对象是空的

这是我使用的代码示例:

[...]

XmlNode customersNode = doc.CreateElement("customers");
companyNode.AppendChild(customersNode);

XmlNode customerNode;
XmlAttribute customerAttribute;

foreach (DataGridViewRow row in dgvCustomers.Rows)
{
    customerNode = doc.CreateElement("customer");

    customerAttribute = doc.CreateAttribute("id");
    customerAttribute.Value = row.Cells[0].Value.ToString();
    //
    // __HERE__ is the problem (or a line above)
    //
    customerNode.Attributes.Append(customerAttribute);

    customerAttribute = doc.CreateAttribute("storeId");
    customerAttribute.Value = row.Cells[1].Value.ToString();
    customerNode.Attributes.Append(customerAttribute);

    customersNode.AppendChild(customerNode);
}

[...and so on...]

customerNode.Attributes.Append(customerAttribute);

带有下划线(VS2010 编辑器)的提示:

Possible 'System.NullReferenceException'

但我认为这是上述问题的原因?

感谢您提供任何支持,并提前非常感谢您的时间和知识分享。

此致!

4

1 回答 1

1

我没有尝试运行显示的代码,但是:您可能会发现简化它会使出错变得更加困难:

XmlElement customerNode; // <==== note this is XmlElement, not XmlNode
XmlAttribute customerAttribute;

foreach (DataGridViewRow row in dgvCustomers.Rows)
{
    customerNode = doc.CreateElement("customer");
    customerNode.SetAttribute("id", row.Cells[0].Value.ToString());
    customerNode.SetAttribute("storeId", row.Cells[1].Value.ToString());

    customersNode.AppendChild(customerNode);
}

您可能还想检查问题实际上不是那个问题row.Cells[0].Value.ToString()还是row.Cells[1].Value.ToString()引发了异常。

于 2013-08-30T09:49:19.450 回答