使用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文件中的每一个事件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
                }

}

这样做的问题是,它返回在第一个"<"和最后一个"/>"之间的整个代码,并注意"逐行"。

提前感谢。

使用c#更新/擦除XML中的给定字符串

把注意力集中在你想做的项目上。

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

EDIT:对于只选择没有内部文本的元素,使用像//*[not(text())]

这样的XPath

您可以使用linq。只选择空节点并删除它们。

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