使用c#更新/擦除XML中的给定字符串
本文关键字:字符串 XML 更新 擦除 使用 | 更新日期: 2023-09-27 18:18:23
所以我试图映射一个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映射上的任何标签。所以,这些标签之间唯一的共同点就是字符"<"/"answers">"。示例:<aBadTag/>
所以,我正在写一个c#代码,我想做的是:1 -检查所有的XML文件中的每一个事件
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);
}
EDIT:对于只选择没有内部文本的元素,使用像//*[not(text())]
您可以使用linq。只选择空节点并删除它们。
doc.root.Descendants().Where(o => string.IsNullOrEmpty(o.Value()).Select(o => o.ParentNode.Remove(o));