使用C#更新/擦除XML中给定的string

所以我试图映射一个Microsoft Excel文件,然后从中提取xml文件。

我这样做后,我最终得到一个XML文件,就像这样:

<domain> <prio>priority</prio> <fund>Fundamentals</fund> </domain> **<onething />** <domain> <prio>priority</prio> <fund>Fundamentals</fund> </domain> **<anotherthing />** 

注意** **之间的标签。 Microsoft Excel自动在没有值的字段中生成它们。

这个标签可以是xml映射上的任何标签。 所以,这些标签之间唯一的共同点就是字符“<”“/”and“>。例如: <aBadTag/>

所以,我正在写ac#代码,我想要做的是:1 – 检查所有XML文件的每一个出现<xxxx /> 2 – 删除该标签。

我到目前为止的代码是:

 XmlDocument doc = new XmlDocument(); doc.Load(c:\someXml.xml); XmlNodeList stuffNodeList = doc.SelectNodes("//*[starts-with(name(), 'domain')]"); foreach (XmlNode stuffNode in stuffNodeList) { if (doc.InnerXml.Between("<", "/>") != "") { //should have code to delete the entire tag } 

}

这个问题是它返回第一个“<”和最后一个“/>”之间的整数代码,并注意“一行一行”。

先谢谢你。

专注于你想要删除的项目:

  XmlNodeList deleteList = doc.SelectNodes("//onething | //anotherthing | //aBadTag"); foreach (XmlNode deleteNode in deleteList) { deleteNode.ParentNode.Remove(deleteNode); } 

编辑:只select没有内部文本的元素,使用XPath像//*[not(text())]

你可以使用linq。 只select空的节点,并删除它们。

 doc.root.Descendants().Where(o => string.IsNullOrEmpty(o.Value()).Select(o => o.ParentNode.Remove(o));