Member 12037267 Ответов: 1

Удаление узла с сохранением ребенка с#


Привет, у меня есть xml с этим форматом:
<a:label>
<b:title>
	<b:detail>
		<b:names>
			<b:name>the name
			<b:colour>blue
		
		<b:attib>
			<b:size>A4






Я хочу удалить ярлык и заголовок, но сохранив оставшуюся часть.
Как я могу это сделать?

Что я уже пробовал:

Я пытался:
XDocument input = XDocument.Parse(theRow["xml"].ToString());
XElement output = input.Root.Elements().First();

XmlNode eliminoxml2 = cfexml.SelectSingleNode("//b:title", spacemanager);
eliminoxml2.RemoveChild(eliminoxml2);

phil.o

Не видя закрывающих тегов, будет трудно угадать соответствующую иерархию. Пожалуйста, покажите действительный xml, то, что вы показали, не будет проверяться.

j snooze

Не зная, есть ли у вас несколько узлов заголовка или нет, почему бы просто не сделать xpath-запрос selectnodes("//b:title") и не бросить дочерние узлы в их собственные узлы. затем вы можете просто перебирать и записывать их или то, что вы пытаетесь сделать.

1 Ответов

Рейтинг:
12

Graeme_Grant

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

Вот XML исправлен:

<?xml version="1.0" encoding="UTF-8"?>
<a:label

	xmlns:a="http://www.myurl.com/a">
	<b:title

		xmlns:b="http://www.myurl.com/b">
		<b:detail>
			<b:names>
				<b:name>the name</b:name>
				<b:colour>blue</b:colour>
			</b:names>
			<b:attib>
				<b:size>A4</b:size>
			</b:attib>
		</b:detail>
	</b:title>
</a:label>

Вот решение с использованием приведенного выше фиксированного xml:
var rawXml = @"<?xml version=""1.0"" encoding=""UTF-8""?>
               <a:label xmlns:a=""http://www.myurl.com/a"">
                    <b:title xmlns:b=""http://www.myurl.com/b"">
                        <b:detail>
			                <b:names>
				                <b:name>the name</b:name>
				                <b:colour>blue</b:colour>
			                </b:names>
			                <b:attib>
				                <b:size>A4</b:size>
			                </b:attib>
		                </b:detail>
	                </b:title>
                </a:label>";

var input = XDocument.Parse(rawXml);

var output = input.Root.Elements().Elements().First().ToString();
Console.WriteLine(output);

Который выводит:
<b:detail xmlns:b="http://www.myurl.com/b">
  <b:names>
    <b:name>the name</b:name>
    <b:colour>blue</b:colour>
  </b:names>
  <b:attib>
    <b:size>A4</b:size>
  </b:attib>
</b:detail>


BillWoodruff

+5 за использование экстрасенсорных способностей :)

Graeme_Grant

LMAO... Спасибо Билл ;)