代码之家  ›  专栏  ›  技术社区  ›  Cleiton

linq to xml-使用linq query时出现空引用异常。n

  •  3
  • Cleiton  · 技术社区  · 15 年前

    我有一个简单的XML文件:

    <?xml version="1.0" encoding="utf-8"?>
    <ConvenioValidacao>
        <convenio ven_codigo="1" tipoValidacao="CPF"></convenio>
        <convenio ven_codigo="1" tipoValidacao="MATRICULA"></convenio>
        <convenio ven_codigo="3" tipoValidacao="CPF"></convenio>
        <convenio ven_codigo="4" tipoValidacao="CPF"></convenio>
    </ConvenioValidacao>
    

    我想做一个 简单的 使用查询此XML文件 LINQ到XML ,下面是我要做的:

    var myXmlDoc = XElement.Load(filePath);
    var result =  from convenio in myXmlDoc.Element("ConvenioValidacao").Elements("convenio")
                     where (string)convenio.Attribute("ven_codigo") == "1" &&
                     (string)convenio.Attribute("tipoValidacao") == "CPF"
                     select convenio;
    

    它不起作用,我得到空引用异常。

    我做错什么了?

    3 回复  |  直到 15 年前
        1
  •  9
  •   Andrew Hare    15 年前

    改为使用:

    var result = from convenio in myXmlDoc.Elements("convenio")
                     where (string)convenio.Attribute("ven_codigo") == "1" &&
                     (string)convenio.Attribute("tipoValidacao") == "CPF"
                     select convenio;
    

    自从 myXmlDoc 属于类型 XElement 没有“document元素”,因此元素的根 根节点(根节点) <ConveioValidacao> )因为这是根节点,所以不需要在 Elements 方法,因为它是文档中的当前位置。

    作为旁注,我建议您重命名 MyxMLDOC myXmlElement 减少混乱。

        2
  •  1
  •   zer0w1dthspace    15 年前

    .element方法获取给定元素的第一个子元素,这里conversiovalidacao不是子元素,它是父元素,当您使用xeelemnt.load()方法加载时,它获取conversiovalidacao及其子元素,因此您应该使用安德鲁的代码。

        3
  •  0
  •   David Basarab    15 年前

    尝试后代而不是元素

    var result =  from convenio in myXmlDoc.Descendants("ConveioValidacao").Descendants("convenio")
                     where (string)convenio.Attribute("ven_codigo") == "1" &&
                     (string)convenio.Attribute("tipoValidacao") == "CPF"
                     select convenio;