Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常C#空列表_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

异常C#空列表

异常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(

我正在从一个XML文件中填写一个列表。某些节点可能不存在,这会导致异常,因为它返回null。代码如下:

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”)
将返回空序列。将该序列转换为列表将为您提供空列表