2011-06-06 48 views
0

所以我使用這段代碼來解析一個巨大的(80,000行)XML文檔。但是,當它交給我時,由於父節點(它由代碼中的if語句修復)添加了unnessecary行,現在它在空節點上翻倍。用C過濾掉XML中的空標籤#

每當我打了一個空的節點會加倍前的節點上...例如這裏是XML的peice的:

<edit> 
    <who>Jim Johnson([email protected])</who> 
    <when>2010-08-18T12:14:33.613Z</when> 
    <description></description> 
</edit> 

而且數據饋送我得到最終看起來像:

who    Jim Johnson 
when    8/18/2010 
description  8/18/2010 

任何人都有一個好主意,如何修剪掉這些空標籤? 以下是生成此表的代碼片段。

using (XmlReader reader = XmlReader.Create(new StringReader(
{ 
    // Parse the file and display each of the nodes. 
    while (reader.Read()) 
    { 
     switch (reader.NodeType) 
     { 
      case XmlNodeType.Element: 
       elementName = reader.Name; 
       switch (elementName) 
       { 
        //display my title stuff 
       } 
       break; 
      case XmlNodeType.Text: 
       elementText = reader.Value; 
       break; 
      case XmlNodeType.XmlDeclaration: 
      case XmlNodeType.ProcessingInstruction: 
       break; 
      case XmlNodeType.Comment: 
       break; 
      case XmlNodeType.EndElement: 
       if (elementName == reader.Name) 
       { 
        contractRowArray1[0] = elementName; 
        contractRowArray1[1] = elementText; 
        contractRow = contractTable.NewRow(); 
        contractRow.ItemArray = contractRowArray1; 
        contractTable.Rows.Add(contractRow); 
       } 
       break; 
     } 
    } 
} 

回答

2

這是行得通嗎?

case XmlNodeType.Element: 
    elementName = reader.Name; 
    elementText = null;     // ADDED 
    switch (elementName) 
    { 
     //display my title stuff 
    } 
    break; 

...

case XmlNodeType.EndElement: 
    if (elementName == reader.Name && elementText != null)  // MODIFIED 
    { 
     contractRowArray1[0] = elementName; 
     contractRowArray1[1] = elementText; 
     contractRow = contractTable.NewRow(); 
     contractRow.ItemArray = contractRowArray1; 
     contractTable.Rows.Add(contractRow); 
    } 
    break; 
+0

我已經嘗試過,對於空白標籤elementText等於以前的文本,所以它永遠不會是由空。通過程序elementText只提到3次,2次在我發佈的代碼段中,唯一的其他時間是初始化。實際上,當我放置空值檢查時,我沒有最重要的部分,讓我看看如果不刪除所有的信息,添加它是否有效。 – SomeoneRandom 2011-06-06 19:52:35

+0

似乎已經工作了,我仍然困惑如何將其設置爲空,並再也不會改變它的價值,它並沒有消滅所有的數據....但我想它的工作原理!謝謝! :D – SomeoneRandom 2011-06-06 19:58:28

+0

當它啓動一個新節點時,它需要消除以前的狀態。在這種情況下,當您啓動一個新元素時,您需要清除前一個元素的文本。 – Amy 2011-06-06 20:44:39