异常C#空列表
我正在从一个XML文件中填写一个列表。某些节点可能不存在,这会导致异常,因为它返回null。代码如下:异常C#空列表,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我正在从一个XML文件中填写一个列表。某些节点可能不存在,这会导致异常,因为它返回null。代码如下: public static List<Compte> getXmlComptes(string pathXml) { var doc = XDocument.Load(pathXml); var comptes = doc.Descendants("Anzeige").Descendants("Kunde").Descendants("Konto").Select(
public static List<Compte> getXmlComptes(string pathXml)
{
var doc = XDocument.Load(pathXml);
var comptes = doc.Descendants("Anzeige").Descendants("Kunde").Descendants("Konto").Select(p => new Compte()
{
NumCompte = p.Element("KtoNr") != null ? p.Element("KtoNr").Value : String.Empty,
typeCompte = p.Element("KontoArt") != null ? p.Element("KontoArt").Value : String.Empty,
Trans = getXmlTransactions(pathXml)
}).ToList();
return comptes;
}
公共静态列表getXmlComptes(字符串路径XML)
{
var doc=XDocument.Load(路径XML);
var comptes=doc.substands(“Anzeige”)。substands(“Kunde”)。substands(“Konto”)。选择(p=>new Compte()
{
NumCompte=p.Element(“KtoNr”)!=null?p.Element(“KtoNr”)。值:String.Empty,
typeCompte=p.Element(“kontart”)!=null?p.Element(“kontart”)。值:String.Empty,
Trans=getXmlTransactions(路径XML)
}).ToList();
返回薪酬;
}
在将项目添加到列表之前,如何进行更改。多谢各位
xml文件的示例:
<Anzeige>
<Kunde>
<IdClient>ppp</IdClient>
<Konto>
<NumCompte>258</NumCompte>
<Transaction>
<idTrans>85555</idTrans>
<type>blebleble</type>
</Transaction>
<Transaction>
<idTrans>85555</idTrans>
<type>blebleble</type>
</Transaction>
</Konto>
</Kunde>
</Anzeige>
购买力平价
258
85555
布莱布尔
85555
布莱布尔
getXmlTransaction的代码:
public static List<Transaction> getXmlTransactions(string pathXml)
{
var doc = XDocument.Load(pathXml);
var transactions = doc.Descendants("Anzeige").Descendants("Kunde").Descendants("Konto").Descendants("Transaktion").Select(p => new Transaction()
{
TransID = p.Element("TransID") != null ? p.Element("TransID").Value : String.Empty,
TypeTransaction = p.Element("TransArt") != null ? p.Element("TransArt").Value : String.Empty
}).ToList();
if (transactions != null)
return transactions.ToList();
else
return new List<Transaction>();
}
公共静态列表getXmlTransactions(字符串路径XML)
{
var doc=XDocument.Load(路径XML);
var transactions=doc.substands(“Anzeige”)。substands(“Kunde”)。substands(“Konto”)。substands(“Transaktion”)。选择(p=>new Transaction()
{
TransID=p.Element(“TransID”)!=null?p.Element(“TransID”)。值:String.Empty,
TypeTransaction=p.Element(“TransArt”)!=null?p.Element(“TransArt”)。值:String.Empty
}).ToList();
if(事务!=null)
return transactions.ToList();
其他的
返回新列表();
}
将元素转换为字符串,而不是直接读取其值。如果未找到元素,则将使用
null
字符串而不是异常:
var doc = XDocument.Load(pathXml);
var comptes = doc.Descendants("Anzeige")
.Descendants("Kunde")
.Descendants("Konto")
.Select(k => new Compte {
NumCompte = (string)k.Element("KtoNr"),
typeCompte = (string)k.Element("KontoArt"),
Trans = getXmlTransactions(k)
}).ToList();
如果在未找到元素时需要空字符串而不是null
,则可以使用运算符
使用相同的技术解析可能不存在的节点。而且我很确定这是getXmlTransactions(pathXml)
方法引发的异常
更新:获取事务时不要加载整个xml文档。您如何知道要读取哪个Konto元素事务。改为传递Konto元素并获取其事务:
public static List<Transaction> getXmlTransactions(XElement konto)
{
return konto.Elements("Transaction")
.Select(t => new Transaction {
TransID = (string)t.Element("idTrans"),
TypeTransaction = (string)t.Element("type")
}).ToList();
}
将元素转换为字符串,而不是直接读取其值。如果未找到元素,则将使用
null
字符串而不是异常:
var doc = XDocument.Load(pathXml);
var comptes = doc.Descendants("Anzeige")
.Descendants("Kunde")
.Descendants("Konto")
.Select(k => new Compte {
NumCompte = (string)k.Element("KtoNr"),
typeCompte = (string)k.Element("KontoArt"),
Trans = getXmlTransactions(k)
}).ToList();
如果在未找到元素时需要空字符串而不是null
,则可以使用运算符
使用相同的技术解析可能不存在的节点。而且我很确定这是getXmlTransactions(pathXml)
方法引发的异常
更新:获取事务时不要加载整个xml文档。您如何知道要读取哪个Konto元素事务。改为传递Konto元素并获取其事务:
public static List<Transaction> getXmlTransactions(XElement konto)
{
return konto.Elements("Transaction")
.Select(t => new Transaction {
TransID = (string)t.Element("idTrans"),
TypeTransaction = (string)t.Element("type")
}).ToList();
}
将元素转换为字符串,而不是直接读取其值。如果未找到元素,则将使用
null
字符串而不是异常:
var doc = XDocument.Load(pathXml);
var comptes = doc.Descendants("Anzeige")
.Descendants("Kunde")
.Descendants("Konto")
.Select(k => new Compte {
NumCompte = (string)k.Element("KtoNr"),
typeCompte = (string)k.Element("KontoArt"),
Trans = getXmlTransactions(k)
}).ToList();
如果在未找到元素时需要空字符串而不是null
,则可以使用运算符
使用相同的技术解析可能不存在的节点。而且我很确定这是getXmlTransactions(pathXml)
方法引发的异常
更新:获取事务时不要加载整个xml文档。您如何知道要读取哪个Konto元素事务。改为传递Konto元素并获取其事务:
public static List<Transaction> getXmlTransactions(XElement konto)
{
return konto.Elements("Transaction")
.Select(t => new Transaction {
TransID = (string)t.Element("idTrans"),
TypeTransaction = (string)t.Element("type")
}).ToList();
}
将元素转换为字符串,而不是直接读取其值。如果未找到元素,则将使用
null
字符串而不是异常:
var doc = XDocument.Load(pathXml);
var comptes = doc.Descendants("Anzeige")
.Descendants("Kunde")
.Descendants("Konto")
.Select(k => new Compte {
NumCompte = (string)k.Element("KtoNr"),
typeCompte = (string)k.Element("KontoArt"),
Trans = getXmlTransactions(k)
}).ToList();
如果在未找到元素时需要空字符串而不是null
,则可以使用运算符
使用相同的技术解析可能不存在的节点。而且我很确定这是getXmlTransactions(pathXml)
方法引发的异常
更新:获取事务时不要加载整个xml文档。您如何知道要读取哪个Konto元素事务。改为传递Konto元素并获取其事务:
public static List<Transaction> getXmlTransactions(XElement konto)
{
return konto.Elements("Transaction")
.Select(t => new Transaction {
TransID = (string)t.Element("idTrans"),
TypeTransaction = (string)t.Element("type")
}).ToList();
}
例如,
.substands(“Kunde”)
不存在时不会仍然抛出?@CodeCaster否,如果未找到Kunde
,substands
将返回空sequence@CodeCaster我相信getXmlTransactions(pathXml)
——也许他直接访问某个节点值。我会让他用那个方法代码更新这个问题。问题是当不存在时,它返回一个空列表,所以它会导致exception@user1503496否,如果Konto
不存在子体(“Knoto”)
将返回空序列。将该序列转换为列表将为您提供空列表。例如,。子体(“Kunde”)
不存在时,它不会仍然抛出?@CodeCaster否,如果未找到Kunde
,子体将返回空列表sequence@CodeCaster我相信getXmlTransactions(pathXml)
-他可能直接访问某个节点值。我会让他用那个方法代码更新这个问题。问题是当不存在时,它返回一个空列表,所以它会导致exception@user1503496否,如果Konto
不存在子体(“Knoto”)
将返回空序列。将该序列转换为列表将为您提供空列表。例如,。子体(“Kunde”)
不存在时,它不会仍然抛出?@CodeCaster否,如果未找到Kunde
,子体将返回空列表sequence@CodeCaster我相信getXmlTransactions(pathXml)
-他可能直接访问某个节点值。我会让他用那个方法代码更新这个问题。问题是当不存在时,它返回一个空列表,所以它会导致exception@user1503496否,如果Konto
不存在子体(“Knoto”)
将返回空序列。将该序列转换为列表将为您提供空列表