为了账号安全,请及时绑定邮箱和手机立即绑定

C# 删除属性 XML

C# 删除属性 XML

C#
慕运维8079593 2021-07-27 05:06:22
我试图从下面的 XML 文件示例代码中删除一些指定的属性。string[] szNodeList 是数组列表,因此节点包含字符串数组中的名称将被删除并再次保存任何帮助将不胜感激。        var doc = new System.Xml.XmlDocument();        doc.Load("attrs.xml");        var root = doc.DocumentElement;        string[] szNodeList = new string[]  { "titleTextColor"        ,"isLightTheme"        ,"showText"                    };        foreach (System.Xml.XmlElement  child in root )        {            foreach (string sz in szNodeList)            {                root.RemoveAttribute(sz);                //if (child.Attributes[sz] != null)                //{                //    child.Attributes.Remove(child.Attributes[sz]);                //}            }        }        doc.Save("build.xml");    XML CODE  <?xml version="1.0" encoding="utf-8"?>  <resources>    <attr name="cropImageStyle" format="reference" />    <attr name="drawerArrowStyle" format="reference" />    <attr name="height" format="dimension" />    <attr name="isLightTheme" format="boolean" />    <attr name="title" format="string" />    <attr name="navigationMode">      <enum name="listMode" value="1" />      <enum name="normal" value="0" />      <enum name="tabMode" value="2" />    </attr>  </resources>但是保存为原始文件而不更改我删除的东西不起作用。
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

试试这个:


doc

    // select all `resources/attr` node

    .SelectNodes("resources/attr")

    .Cast<XmlNode>()

    // that contains the `name` attribute whose value is in `szNodeList`

    .Where(x => !string.IsNullOrEmpty(x.Attributes["name"]?.Value) && szNodeList.Contains(x.Attributes["name"].Value))

    .ToList()

    // and, remove them from their parent

    .ForEach(x => x.ParentNode.RemoveChild(x));


查看完整回答
反对 回复 2021-07-31
?
大话西游666

TA贡献1817条经验 获得超14个赞

这里的问题之一是术语。正如我所理解的,您不是在尝试删除属性- 您是在尝试根据属性的值删除整个元素name。


如果您可以为此使用 LINQ to XML,我会这样做。它通常使使用 XML 变得更加容易。这是一个完整的程序来做你想做的事:


using System;

using System.Linq;

using System.Xml.Linq;


class Test

{

    static void Main()

    {

        var namesToRemove = new[]

        { 

            "titleTextColor",

            "isLightTheme",

            "showText"

        };

        XDocument doc = XDocument.Load("test.xml");

        // For all the elements directly under the document root...

        doc.Root.Elements()

            // Where the array contains the value of the "name" attribute...

            .Where(x => namesToRemove.Contains((string) x.Attribute("name")))

            // Remove them from the document

            .Remove();

        doc.Save("output.xml");

    }

}

输出:


<?xml version="1.0" encoding="utf-8"?>

<resources>

  <attr name="cropImageStyle" format="reference" />

  <attr name="drawerArrowStyle" format="reference" />

  <attr name="height" format="dimension" />

  <attr name="title" format="string" />

  <attr name="navigationMode">

    <enum name="listMode" value="1" />

    <enum name="normal" value="0" />

    <enum name="tabMode" value="2" />

  </attr>

</resources>


查看完整回答
反对 回复 2021-07-31
  • 2 回答
  • 0 关注
  • 278 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信