当元素缺少其值时解析xml

时间:2011-01-10 08:12:46

标签: linq-to-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 个答案:

答案 0 :(得分:1)

如果您遇到解析问题,尝试显式解析可能是值得的。例如

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

或者即使TryParse可能会为您提供更多相关信息。

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

更新:为TryParse添加了MSDN链接。