【问题标题】:Method is executed but not has effect方法已执行但没有效果
【发布时间】:2013-09-13 14:41:42
【问题描述】:

我正在创建一个用于操作 XML 的类,我创建了我的方法 RemoveNode 的重载

public partial class HWXml
{
    public string XmlFile;
    private XmlDocument XmlDoc = new XmlDocument();

    public HWXml(string XmlFile)
    {
        this.XmlFile = XmlFile;
    }

    public XmlNode SelectSingleNode(string NodePath)
    {
        XmlDoc.Load(XmlFile);
        return XmlDoc.SelectSingleNode(NodePath);
    }

    public void RemoveNode(XmlNode removeChild)
    {
        XmlDoc.Load(XmlFile);
        removeChild.ParentNode.RemoveChild(removeChild);
        XmlDoc.Save(XmlFile);
    }

    public void RemoveNode(string RemoveChild)
    {
        XmlDoc.Load(XmlFile);
        XmlNode removeChild = XmlDoc.SelectSingleNode(RemoveChild);
        removeChild.ParentNode.RemoveChild(removeChild);
        XmlDoc.Save(XmlFile);
    }
}

当我尝试使用字符串参数删除节点时,它可以工作

private void RemoveXML_Click(object sender, RoutedEventArgs e)
{
    MyXmlClass myXmlClass = new MyXmlClass(XmlFile);
    myXmlClass.RemoveNode("root/Content");
}

但是当我尝试使用 XmlNode 参数删除节点时,它会编译,执行,没有错误消息,但没有效果,它不会删除 XML 文件中的任何内容。

private void RemoveXML_Click(object sender, RoutedEventArgs e)
{
    MyXmlClass myXmlClass = new MyXmlClass(XmlFile);
    XmlNode node = myXmlClass.SelectSingleNode("root/Conteudo");
    myXmlClass.RemoveNode(node);
}

什么问题?

【问题讨论】:

    标签: c# class object logic


    【解决方案1】:

    XmlNode 参数绝对不是您在此方法中加载的XmlDoc 的一部分(因为在加载文档之前您有此节点)。因此对该节点的操作不会影响不属于哪个节点的文档。

    在第二种情况下,您正在选择已加载文档的节点。该节点属于刚刚加载到XmlDoc的xml树,因此删除节点会影响文档。

    你应该明白XmlDocumentXDocument也是如此)是如何加载的:​​

    1. 如果它有一些节点(以前加载过),那么所有节点都会被删除
    2. XmlReader 已创建
    3. 此阅读器逐节点读取输入流
    4. 对于每个找到的节点,创建适当类的新实例并将其添加到文档中(例如,如果阅读器已读取某个元素,则创建新的 XmlElement 并将其添加到文档的当前元素)

    因此,您最终会得到与之前加载 xml 期间创建的对象无关的全新对象图。加载 xml 后,XmlDocument 的实例保持不变,但里面有全新的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-11
      • 2012-10-16
      • 2018-03-21
      • 1970-01-01
      • 2012-12-15
      • 2021-06-01
      • 2012-03-29
      • 2016-10-06
      相关资源
      最近更新 更多