XDocument удаление узлов - PullRequest
       12

XDocument удаление узлов

5 голосов
/ 21 декабря 2010

У меня есть XML-файл

<rows>
  <head>
    <beforeInit>
      <call command="attachHeader">
        <param>#text_filter,#text_filter,#text_filter,#text_filter,#text_filter,#text_filter</param>
      </call>
    </beforeInit>
    <afterInit>
      <call command="enablePaging">
        <param>recinfoArea</param>
      </call>
     </afterInit>
    <column width="100" align="center" type="ro" sort="server" color="undefined" id="Id">Id</column>
    <column width="100" align="center" type="ro" sort="server" color="undefined" id="NazovProjektu">NazovProjektu</column>
   </head>
</rows>

Я хотел бы удалить элементы beforeInit и afterInit.

Я попытался

xml.Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();

, но не повезло.

Ответы [ 2 ]

15 голосов
/ 21 декабря 2010

, если вы хотите удалить каждый случай beforeInit или afterInit, вы можете использовать

xml.Descendants().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();

(потомки вместо элементов). elements () возвращает список прямых дочерних узлов, тогда как потомки возвращают каждый узел.

2 голосов
/ 21 декабря 2010

Если xml - это XElement, попробуйте:

xml.Element("head").Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();

В противном случае, если это XDocument:

xml.Root.Element("head").Elements().Where(e=>e.Name == "beforeInit" || e.Name == "afterInit").Remove();

То, как оно есть сейчас, настроено для поиска подпрограммы.элементы в <rows>, а не <head>.Другими словами, Elements () возвращает только прямых потомков узла.Если вы хотите, чтобы все потомки, независимо от уровня, вам нужны потомки ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...