Как мне не печатать узел, когда он пуст

1

Я написал следующий код. Но я не могу понять, как не печатать пустой узел, если значение List() равно 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>

Я не хочу, чтобы он печатался, если он равен нулю.

  • 0
    Как вы создали этот вывод XML?
  • 0
    @har07 har07 - у меня есть xml, хранящийся в формате строки в chkData
Показать ещё 2 комментария
Теги:
xelement
linq-to-xml

1 ответ

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
.....
.....
  • 1
    Огромное спасибо. Это работает отлично и действительно удаляет нулевые токены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню