VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 769|回复: 4

在ASP.NET中用XmlDocument如何删除XML文件中的某一结点?

[复制链接]

1

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-3 22:30:01 | 显示全部楼层 |阅读模式
是这样的,我用下面的程序可以删除节点<User></User>中的所有内容,但是我却无法删除<User></User>节点

    protected void DeleteButton_Click(object sender, EventArgs e)
    {
        XmlDocument Doc = new XmlDocument();
        Doc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
        XmlNodeList NodeList = Doc.SelectSingleNode("dbGuest").ChildNodes;

        foreach (XmlNode xn in NodeList)
        {
            XmlElement xe = (XmlElement)xn;
            XmlNodeList node = xe.GetElementsByTagName("Name");

            if (node.Count > 0)
            {
                if (node[0].InnerText == ddlName.SelectedItem.Text)
                {
                    xe.RemoveAll();
                    break;
                }
            }
            //xn.RemoveAll();
        }

        Doc.Save(Server.MapPath(".\\db\\dbGuest.xml"));
        DataBind();
    }

XML文件:

<?xml version="1.0" standalone="yes"?>
<dbGuest>
  <User>
    <Name>asfew3ere1sfasf</Name>
  </User>
  <User>
    <Name>asfew3243232cvd1sfasf</Name>
  </User>
</dbGuest>

例如我按下了DeleteButton按钮要删除第二个<User></User>我想得的的XML文件是这样的:
<?xml version="1.0" standalone="yes"?>
<dbGuest>
  <User>
    <Name>asfew3ere1sfasf</Name>
  </User>
</dbGuest>
但是我实际上得到的结果是这样的:
<dbGuest>
  <User>
    <Name>asfew3ere1sfasf</Name>
  </User>
  <User>
  </User>
</dbGuest>

请问如何解决?
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-1-3 22:33:01 | 显示全部楼层
string xml = @"<?xml version=""1.0"" standalone=""yes""?>
<dbGuest>
  <User>
    <Name>asfew3ere1sfasf</Name>
  </User>
  <User>
    <Name>asfew3243232cvd1sfasf</Name>
  </User>
</dbGuest>";

        XmlDocument Doc = new XmlDocument();
        //Doc.Load(Server.MapPath(".\\db\\dbGuest.xml"));
        Doc.LoadXml(xml);
        XmlNode node = Doc.SelectSingleNode("//Name[.='asfew3243232cvd1sfasf']");

        if (node != null)
        {
            node.ParentNode.ParentNode.RemoveChild(node.ParentNode);

        }

        Doc.Save(Response.OutputStream);
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-1-3 22:48:01 | 显示全部楼层
如果按你的写法,

改一句就可以了.
xe.RemoveAll();
========>  xe.ParentNode.RemoveChild(xe);
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-1-3 22:54:01 | 显示全部楼层
xe表示User节点
xe.RemoveAll()是移除它的所有子节点而并不是它自己.
回复

使用道具 举报

1

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-1-3 23:18:01 | 显示全部楼层
谢谢帮忙,我刚学不久不太会!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表