簡體   English   中英

Linq to XML - 使用linq query.n時出現Null引用異常

[英]Linq to XML - Null Reference Exception when using linq query.n

我有一個簡單的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>

我正在嘗試使用Linq to XML對這個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;

它不工作,我得到null引用異常。

我做錯了什么?

請改用:

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

由於myXmlDoc是類型XElement沒有“文檔元素”和作為元件的此類根根節點( <ConveioValidacao> 由於這是根節點,因此您無需在Elements方法中指定它,因為它是文檔中的當前位置。

作為旁注,我建議您將myXmlDoc重命名為myXmlElement以減少混淆。

.Element方法獲取給定元素的第一個子元素,在這里ConveioValidacao不是子元素,它是父元素,當你通過XEelemnt.Load()方法加載時,它獲取ConveioValidacao及其子元素,所以你應該使用Andrew的碼。

嘗試Descendants而不是Elements

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM