【问题标题】:How do I not print a node when it is null当节点为空时如何不打印节点
【发布时间】:2014-07-22 03:52:57
【问题描述】:

我已经编写了以下代码。但是如果 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>

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

【问题讨论】:

  • 您是如何生成 XML 输出的?
  • @har07 - 我在 chkData 中有一个以字符串格式存储的 xml
  • 据我所知,您的代码正在解析 XML 并生成 TokenValues 对象。但是您的问题是关于 production XML 而不是解析。
  • @har07 - 抱歉,如果问题不清楚。我的问题是,在将 XML 解析为 TokenValues 对象时,即使它为 Null, 也会显示出来,我不希望这样。

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


【解决方案1】:

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

【讨论】:

  • 非常感谢。这完美地工作并且确实删除了空令牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多