Как удалить определенные атрибуты в XMLDocument? - PullRequest
2 голосов
/ 09 августа 2011

В моей кодовой базе C # у меня есть XMLDocument вида:

<A>
<B>
<C mlns='blabla' yz='blablaaa'> Hi </C>
<D mlns='blabla' yz='blablaaa'> How </D>
<E mlns='blabla' yz='blablaaa'> Are </E>
<F mlns='blabla' yz='blablaaa'> You </F>
</B>
<B>
<C mlns='blabla' yz='blablaaa'> I </C>
<D mlns='blabla' yz='blablaaa'> am</D>
<E mlns='blabla' yz='blablaaa'> fine</E>
<F mlns='blabla' yz='blablaaa'> thanks</F>
</B>
</A>  

Используя Linq-to-XML или иным образом, я хочу удалить атрибуты mlns и yz длявсе элементы, содержащиеся в элементе B.

Каков наилучший способ достичь этого?

Ответы [ 2 ]

7 голосов
/ 09 августа 2011

Использование LINQ to XML ...

public static void RemoveAttributes(XNode parent, XName attribute)
{
    // I'm not sure what would happen if we tried to remove the attribute
    // while querying... seems like a bad idea.
    var list = parent.Descendants()
                     .Attributes(attribute)
                     .ToList();

    foreach (var attribute in list)
    {
        attribute.Remove();
    }
}

Тогда:

RemoveAttributes(doc, "mlns");
RemoveAttributes(doc, "yz");

РЕДАКТИРОВАТЬ: Я только что заметил, что на самом деле это должно быть еще проще, используя метод расширения Remove:

public static void RemoveAttributes(XNode parent, XName attribute)
{
    parent.Descendants()
          .Attributes(attribute)
          .Remove();

}

Так что вы можете сделать это без метода довольно просто:

doc.Descendants().Attributes("mlns").Remove();
doc.Descendants().Attributes("yz").Remove();
1 голос
/ 09 августа 2011

если у вас есть только эти два атрибута,

 doc.Element("A").Elements("B").Attributes().Remove();
...