将 XmlNode.InnerText 转换为双倍

本文关键字:转换 XmlNode InnerText | 更新日期: 2023-09-27 18:36:53

条件 Double.TryParse(node.子节点[4]。内部文本,当然)不起作用。它始终返回 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>

将 XmlNode.InnerText 转换为双倍

TryParse 方法使用当前区域性,因此数字格式可能因系统而异。

您可以使用 TryParse 的覆盖版本,其中将 IFormatProvider 作为参数传递。文化信息.不变文化使用 .作为小数点分隔符:

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

顺便说一句,通过将它们作为异常抛出来检查值是相当有趣的方法,但我强烈建议调试/日志记录以检查正在发生的事情。