RemoveAttributes没有做任何事情

时间:2013-12-15 01:17:18

标签: linq-to-xml

知道为什么RemoveAttributes无效吗?

foreach (XElement myItem in _list_XEle)
{
    MyObj temp = new MyObj();
    XElement myCopy = new XElement(myItem);
    myCopy.RemoveAttributes();

    // other stuff
    temp.String1 = myCopy.ToString();

    _list_MyObj.Add(temp);
}

在此代码之后,属性仍然存在。不确定是否相关,但所有属性都以名称空间为前缀。

非常感谢

1 个答案:

答案 0 :(得分:0)

我猜你的情况如何,但是给出了以下XML:

<content xmlns:ns="SomeNameSpace" xmlns="DefaultNamesSpace">
    <customer ns:id="123" ns:attr="abc" />
    <customer ns:id="125" ns:attr="fgr" />
</content>

我写了一个类似于你的示例代码:

var dom = XElement.Load("XMLFile1.xml");

XNamespace ns = "DefaultNamesSpace";
foreach (var myItem in dom.Elements(ns + "customer"))
{
    XElement myCopy = new XElement(myItem);
    myCopy.RemoveAttributes();
    //myCopy.Name = myCopy.Name.LocalName;
}

如果按原样运行,myCopy将为<customer xmlns="DefaultNamesSpace" />,因为属性已删除,但该元素仍在默认命名空间中,也标记为。要删除该命名空间属性,应将复制的XElement的名称更改为空命名空间。如果您取消注释最后一行,则您的XElement将为<customer />