用C#过滤掉XML中的空标记

本文关键字:XML 过滤 | 更新日期: 2023-09-27 17:58:27

所以我使用这段代码来解析一个巨大的(80000行)XML文档。然而,当它交给我时,由于父节点(这是由代码中的if语句修复的),它添加了不必要的行,现在它在空节点上加倍。

每当我碰到一个空节点时,它就会在它之前的节点上加倍……例如,这里有一个xml:

<edit>
    <who>Jim Johnson(Jim.m.Johnson@google.com)</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;
        }
    }
}

用C#过滤掉XML中的空标记

这行得通吗?

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;