【问题标题】:Object reference not set to an instance of an object. LINQ to XML errror你调用的对象是空的。 LINQ to XML 错误
【发布时间】:2011-04-15 11:46:59
【问题描述】:

我正在尝试从 XML 中提取数据。我使用这个 XML 文件的 XSD 生成了 C# 类。我正在尝试从 XML 文件中获取数据并将其保存为 C# 类。 我遇到了用户未处理的 NULLReferenceException; “你调用的对象是空的。”错误。

我的 XML 文件

<clue_personal_auto xmlns = "http://cp.com/rules/client"> 
<admin> 
<quoteback name="trackingNUmber">67890 </quoteback>
</admin> 
<report> 
    <inquiry_processing_summary>
    <classification> inqiury </classification>
    </inquiry_processing_summary>
    <results_dataset>
      <claims_history type="Subject Section">
      <claim id = "s1" unit-number="1" sequence-number="1" number="11111">
      <scope_of_claim>Full Scope</scope_of_claim>
      <claim_date>05/19/2005</claim_date>
      <claim_age years="1" months="10"/>
      <clue_file_number>222221</clue_file_number>
      <policy number="XX111111">
          <issuer> CUSTOMER TEST </issuer>
          <auto_type> Personal Auto</auto_type>
          <fsi_issuer>Field absent on inquiry</fsi_issuer>
       </policy>
       <subject classification="POlicy HOlder">
         <name>
         <first>SADIE</first>
         <last>DOE</last>
         <fsi_first>Discrepancy</fsi_first>
         <fsi_middle>Field absent on inquiry and rport</fsi_middle>
         <fsi_last>Match</fsi_last>
         <fsi_suffix>Field absent on inquiry and report</fsi_suffix>
        </name>
        <ssn>123456789</ssn>
        <driversLicense number="999999999" state="GA">
        <fsi_state>Field abscent on inquiry</fsi_state>
        <fsi_number>Field absent on inquiry</fsi_number>
        </driversLicense>
        </subject>
        <claimPayment amount_paid="2841.00" type="Collision" disposition="Open"/>
        <claimPayment amount_paid="0.00" type="Physical/Property Damage" disposition="Open"/>
        <claim_association_indicator>Indicates the Vehicle Operator was the person matched </claim_association_indicator>
        <vehicle>
         <model_year>1995</model_year>
         <model_make>Nissan Sentra</model_make>
         <vin> 9N9ABC99D434kjlkfajsdkl</vin>
         <disposition>Not Reported </disposition>
         <fsi_model_year>Field absent on inquiry and report</fsi_model_year>
         <fsi_model_make>Field absent on inquiry and report</fsi_model_make>
         <fsi_vin>Field absenton inquiry and report</fsi_vin>
         </vehicle>
        </claim>
      <claim id = "s2" unit-number="2" sequence-number="2" number="22222">
        <scope_of_claim>Limited scope</scope_of_claim>
      </claim>
      <claim id = "s3" unit-number="3" sequence-number="3" number="33333">
      </claim>
      </claims_history>
      <inquiry_history name ="GO America" id="1" date="09/10/2010"/>
     </results_dataset>
</report> 

我的查询:

  List<results_dataset> resultdatasets =
    (from b in query.Descendants(xmlns + "results_dataset")
      select new results_dataset
          {
           claimsHistory = 
                     (from c in query.Descendants(xmlns + "claims_history")
                      select new Claims_history
                         {
                           claim = (from d in query.Descendants(xmlns + "claim")
                              select new Claim () 
                               {
                               policy = ( from e in query.Descendants(xmlns + "policy")
                                          **select new cluePolicyType()
                                            {
                                             issuer = e.Element("issuer").Value ,
                                             number = e.Attribute("number").Value ,
                                             auto_type = e.Element("auto_type").Value,
                                             fsi_issuer= e.Element("fsi_issuer").Value,
                                           } **
                                        ).ToList(),
                             scope_of_claim = d.Element("scope_of_claim").Value,
                             type = c.Attribute("type").Value

                           }).ToList()
                 }
         ).ToList();

******** 之间的区域是我收到此错误的地方。如果我删除 ******** 的 {} 区域内的代码,则不会出现错误。我无法弄清楚。它快把我逼疯了。

【问题讨论】:

标签: linq-to-xml nullreferenceexception


【解决方案1】:

所以您已将问题简化为以下几行:

issuer = e.Element("issuer").Value ,
number = e.Attribute("number").Value ,
auto_type = e.Element("auto_type").Value,
fsi_issuer= e.Element("fsi_issuer").Value

如果无法测试您的代码,我猜您的某些元素根本不存在元素或属性 (issuer/number/auto_type/fsi_issuer)。如果没有找到指定的属性,它会返回null,当你解析.Value时会抛出你的NRE。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2020-08-03
    • 2013-05-27
    • 2013-07-22
    相关资源
    最近更新 更多