将XmlNode.InnerText转换为Double

时间:2015-01-09 19:33:24

标签: c# xml

条件Double.TryParse(node.ChildNodes [4] .InnerText,当然)不起作用。它总是返回0.

 foreach (XmlNode node in XmlDoc.SelectNodes("/ValCurs/Valute"))  
                {
                    if (node.ChildNodes[1].InnerText == curr_name) // CharCode
                    {
                       // throw new Exception(node.ChildNodes[4].InnerText);  //returns 2.085 but the next condition doesn't work
                        if (Double.TryParse(node.ChildNodes[4].InnerText, out course)) // course value, nominal = 100
                        {     
                            if (Int32.Parse(node.ChildNodes[2].InnerText) == 10) course *= 10;   //for RUB, BYR nominal = 10
                            if (Int32.Parse(node.ChildNodes[2].InnerText) == 1000) course /= 10; //for JPY, HUF nominal = 1000
                            return course;
                        }
                    }  

XML片段

<Valute id="1">
<NumCode>036</NumCode>
<CharCode>AUD</CharCode>
<Nominal>100</Nominal>
<Name>Australian dollars</Name>
<Value>1276.6300</Value>
</Valute>

1 个答案:

答案 0 :(得分:0)

TryParse方法使用当前文化,因此数字格式可能因您的系统而异。

您可以使用TryParse的覆盖版本,将IFormatProvider作为参数传递。 CultureInfo.InvariantCulture使用。作为小数分隔符:

Double.TryParse(node.ChildNodes[4].InnerText, CultureInfo.InvariantCulture, out course)

顺便说一下。通过将它们作为异常抛出来检查值是一种相当有趣的方法,但我强烈建议调试/记录以检查发生了什么。