Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用C过滤XML中的空标记#_C#_Xml_Tags - Fatal编程技术网

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

C# 用C过滤XML中的空标记#,c#,xml,tags,C#,Xml,Tags,所以我用这段代码来解析一个巨大的(80000行)XML文档。但是,当它被交给我时,由于父节点(代码中的if语句修复了父节点),它添加了不必要的行,现在它在空节点上加倍 每当我点击一个空节点,它就会在它之前的节点上翻倍。。。例如,下面是xml的一个示例: <edit> <who>Jim Johnson(Jim.m.Johnson@google.com)</who> <when>2010-08-18T12:14:33.613Z</

所以我用这段代码来解析一个巨大的(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>
有人知道如何删除这些空标签吗? 下面是生成此表的代码的示例

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;
        }
    }
}
这行吗

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


我已经尝试过了,因为空白标签EeltTeNe等于以前的文本,所以它永远不会变成空。通过程序elementText只提到了3次,2次是在我发布的代码段中,另一次是初始化。事实上,当我进行空检查时,我没有顶部部分,让我看看添加它是否可以在不删除所有信息的情况下工作。似乎已经工作了,我仍然很困惑,在将其设置为空并且不再更改值之后,它如何没有删除所有数据。。。。但我想这是可行的!谢谢当它启动一个新节点时,它需要清除以前的状态。在这种情况下,当你开始一个新元素时,你需要删除前一个元素的文本。我现在意识到,经过一些研究,读者只读取一行的一部分,我假设在每一次运行中(reader.read())都读取一整行,就像布拉一样,但我意识到现在它读取运行它,然后布拉,然后看起来很奇怪。无论如何,再次谢谢你!最后一个问题是,如果您能回答这个问题,我的XML中有这样的数据对象:这是什么类型的XmlNodeType?它似乎是作为一个元素运行的,我不知道如何区分这种类型的元素和这种类型的元素。
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;