Удалить определенные узлы под корнем XML? - PullRequest
6 голосов
/ 23 января 2012

Мой XML ниже;

<XML ID="Microsoft Search Thesaurus">
 <thesaurus xmlns="x-schema:tsSchema.xml">
   <diacritics_sensitive>1</diacritics_sensitive>
   <expansion>
     <sub>Internet Explorer</sub>
     <sub>IE</sub>
     <sub>IE5</sub>
   </expansion>
   <expansion>
     <sub>run</sub>
     <sub>jog</sub>
   </expansion>
 </thesaurus>
</XML>

Я хочу удалить узлы «расширения» из XML. После удаления процесса это будет так;

<XML ID="Microsoft Search Thesaurus">
 <thesaurus xmlns="x-schema:tsSchema.xml">

 </thesaurus>
</XML>

Мой код указан ниже;

XDocument tseng = XDocument.Load("C:\\tseng.xml");
XElement root = tseng.Element("XML").Element("thesaurus");
root.Remove();
tseng.Save("C:\\tseng.xml");

Я получил ошибку "Ссылка на объект не установлена ​​на экземпляр объекта." для строки "root.Remove ()". Как я могу удалить узлы "расширения" из файла XML? Благодаря.

Ответы [ 3 ]

3 голосов
/ 23 января 2012

Использование:

Удаляет только expansion элементы:

XNamespace ns = "x-schema:tsSchema.xml";
tseng.Root.Element(ns + "thesaurus")
    .Elements(ns + "expansion").Remove();

Удалит всех детей thesaurus:

XNamespace ns = "x-schema:tsSchema.xml";
tseng.Root.Element(ns + "thesaurus").Elements().Remove();
0 голосов
/ 23 января 2012

У вас нет успеха, потому что у вашего thesaurus другое пространство имен. Вам нужно указать ti, чтобы все заработало.

XNamespace ns = "x-schema:tsSchema.xml";
XDocument tseng = XDocument.Parse(xml);

XElement root = tseng.Element("XML").Element(ns + "thesaurus");
root.Elements().Remove();

В целом ваш код действителен. Единственное, что вам нужно, чтобы удалить дочерние элементы не root, чтобы достичь нужных вам результатов.

0 голосов
/ 23 января 2012

Что-то вроде

XElement root = tseng.Element("XML").Element("thesaurus"); 
tseng.Element("XML").Remove(thesaurus);

Вы удаляете узел из его родителя ...

если вы хотите удалить только узлы расширения, то в основном вы найдете удаление, пока в тезаурусе их нет, или не вернете их список и не удалите их из родительского тезауруса.

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