2011-01-10 78 views
2

我试图以xml格式解析一些货币数据。 下面的代码不起作用,但是当我将它全部解析为字符串时,它确实有效。当元素缺失值时解析xml

  CurrencyName = (string)d.Element("CurrencyName"), 
      ForexBuying = ((decimal?)d.Element("ForexBuying")), 
      ForexSelling = ((decimal?)d.Element("ForexSelling")), 
      BanknoteBuying = ((decimal?)d.Element("BanknoteBuying")), 
      BanknoteSelling = ((decimal?)d.Element("BanknoteSelling")), 
      CrossRateEuro = ((decimal?)d.Element("CrossRateEuro")), 
      CrossRateUSD = ((decimal?)d.Element("CrossRateUSD")) 

只有CurrencyName存在于所有的元素,有时我们有像 <BanknoteBuying></BanknoteBuying>元素,一些节点不携带BanknoteBuying元素可言。 奇怪的是我得到日期/时间解析数据错误。因此,简而言之,将所有内容全部转换为字符串作品,但是转换为适当的可空数据类型不会,数据格式良好,并且本地区域设置正确以解析十进制数据。

<Currency Kod="RUB" CurrencyCode="RUB"> 
<Unit>1</Unit> 
<Isim>RUS RUBLESİ</Isim> 
<CurrencyName>RUSSIAN ROUBLE</CurrencyName> 
<ForexBuying>0.05011</ForexBuying> 
<ForexSelling>0.05077</ForexSelling> 
<BanknoteBuying></BanknoteBuying> 
<BanknoteSelling></BanknoteSelling> 
<CrossRateUSD>30.5655</CrossRateUSD> 
<CrossRateOther></CrossRateOther> 

回答

1

如果您有解析的麻烦,它可能是值得尝试的明确的解析。例如

Decimal.Parse(d.Element("CrossRateUSD")); 

或甚至与TryParse可能会为你找一些关于它的更多信息。

还有一件事要尝试,我刚刚注意到我写这篇文章的时候,我认为你所寻找的是元素的价值形式,而不是元素本身。不知道你的XML格式,我不能肯定地说100%,但尝试d.Element(“CrossRateUSD”)。

更新:添加到MSDN TryParse的链接。

+0

如果Decimal.Parse无法解析数据,它会抛出异常,对吧? – hazimdikenli 2011-01-10 08:25:48