如何在节点为空时不打印节点

时间:2014-07-22 03:52:58

标签: c# xml linq-to-xml xelement

我写了以下代码。但是,如果List()Value为null,我无法理解如何不打印空节点。我该怎么办呢?

 private TokenValues TokenValues(string emailData)
 {

   if (!string.IsNullOrWhiteSpace(emailData))
   {

    XDocument xmldoc = XDocument.Parse(chkData);

    var nodes = xmldoc.Descendants().Elements();
    if (nodes == null || nodes.Count() == 0) return new TokenValues();
      TokenValues tokenvalues = new TokenValues { Tokens = new List<Model2.Token>() };
      foreach (XElement node in nodes)
      {
         Model2.Token token = new Model2.Token { Name = node.Name.ToString(), 
                                                 Value = node.Value, 
                                                 Tokens = new List<Model2.Token>() 
                                               };

         var descendants = node.Descendants();
         if (descendants != null && descendants.Count() > 0)
         {
             foreach (XElement dnode in descendants)
                  token.Tokens.Add(new Model2.Token { Name = dnode.Name.ToString()
                                                    , Value = dnode.Value
                                                    , Tokens = new List<Model2.Token>()                               
                                                    }
                     );

         }
          tokenvalues.Tokens.Add(token);
      }
      return tokenvalues;

我的输出文件如下所示:

  <Tokens>
    <Token>
       <Name>first_name</Name>
       <Tokens/>
       <Value>Antoinette</Value>
    </Token>
    <Token>
       <Name>last_name</Name>
       <Tokens/>
       <Value>MCGRATH</Value>
    </Token>
    <Token>
        <name>Employee_Details</name>
          <Tokens>
            <Token>
              <name>Address</name>
              <Tokens/>
              <value>123 xyz</value>
            </Token>
            <Token>
               <name>City</name>
               <Tokens/> 
               <value>Las Vegas</value>
            </Token>
         </Tokens>
       <Value>
          123 xyz Las Vegas
       </Value>
    </Token>
 </Token>

如果它为null,我不想打印。

1 个答案:

答案 0 :(得分:0)

如何在执行更多逻辑之前预处理XML文档以删除空节点:

XDocument xmldoc = XDocument.Parse(chkData);
var emptyNodes = xmldoc.Descendants().Where(o => o.IsEmpty).ToList();
foreach (XElement n in emptyNodes)
{
    n.Remove();
}
//here you can continue with your logic to generate TokenValues
.....
.....
相关问题