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

当节点为空时,如何不打印该节点

  •  1
  • bzchk  · 技术社区  · 10 年前

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

     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>
    

    如果为空,我不希望打印。

    1 回复  |  直到 10 年前
        1
  •  0
  •   har07    10 年前

    在执行进一步的逻辑之前,如何预处理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
    .....
    .....