C# 用C过滤XML中的空标记#
所以我用这段代码来解析一个巨大的(80000行)XML文档。但是,当它被交给我时,由于父节点(代码中的if语句修复了父节点),它添加了不必要的行,现在它在空节点上加倍 每当我点击一个空节点,它就会在它之前的节点上翻倍。。。例如,下面是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</
<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;