0

我从 XML 文件中获取值并将它们放在dataGridView. 我成功地这样做了,但是在我想操作从 XML 文件中获得的数据之后,它不起作用并且我得到一个错误Input string was not in a correct format.

我的目标是转换从 XML 文件中捕获的数据并将其除以 1024。不是InnerText我可以安全地将字符串转换为长字符串吗?我应该添加更多代码来完成这项工作吗?

在调试过程中,我打印出 temp 的值,值为 53999759360,我也尝试不使其成为 ToString() ,同样的错误

这是我的代码的一部分:(大小的值是“53999759360”)

        XmlDocument doc = new XmlDocument();
        string xmlFilePath = @"C:\xampp\htdocs\userInfo.xml";
        doc.Load(xmlFilePath);

        XmlNodeList accountList = doc.GetElementsByTagName("account");

        foreach (XmlNode node in accountList)
        {
            XmlElement accountElement = (XmlElement)node;

            foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
            {
                String temp = (dskInterface["size"].InnerText).ToString();
                long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
            }
        }
4

1 回答 1

3

恐怕你的代码工作正常。必须是“temp”变量是 string.Empty 或空格。

我创建了一个 XmlDocument(来自 XDocument,抱歉。我认为它更容易使用)看起来像您的目标并运行您的代码。它运行良好并给出适当的值:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}

编辑:这是测试实际情况的更简单方法:

Convert.ToInt64(null); // Doesn't crash
Convert.ToInt64(string.Empty); // Crashes
Convert.ToInt64(""); // Will crash if you comment the line above
Convert.ToInt64(" "); // Will crash if you comment the lines above
于 2014-03-15T22:22:29.753 回答