使用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));