/ / змінити ім'я вузла в XML за допомогою XmlDocument - asp.net, xml, xmldocument

змінити ім'я вузла в XML за допомогою XmlDocument - asp.net, xml, xmldocument

У мене цей xml

<genral>
<mynode id="1">
<first id="1.1">
<nodechild-first id="1.1.1"></nodechild-first>
<nodechild-seconed id="1.1.2"></nodechild-seconed>
</first>
</mynode>
</genral>

Мені потрібно перейменувати один з імен вузлів, наприклад змінити ім'я <first> до <f> або <nodechild-first> до <c-f>

Як я можу це зробити за допомогою asp.net (XmlDocument).

значення вузла імені призначення та нового вузла імені, представлено двома рядковими змінними.

Дякую за будь-яку допомогу

Відповіді:

1 для відповіді № 1

Ви не можете просто змінити назву вже існуючого вузла. Що вам потрібно зробити, це.

  1. Створіть новий вузол з потрібною назвою.
  2. Встановіть всі атрибути, що існували на вихідному вузлі, на новий вузол.
  3. Додайте новий вузол до оригінального документа або там, де ви його хочете.
  4. Виділіть усі дочірні елементи попереднього вузла та додайте їх до нового вузла.
  5. Видаліть старий вузол.

Я також повинен сказати вам, що ви не можете перейменувати файлкореневий вузол, якщо ви хочете це зробити, вам потрібно або перемкнути make 3. після 5., або вам потрібно вставити його в новий XMLDocument, оскільки він не дозволить вам мати два кореневі вузли.

З повагою


0 для відповіді № 2

Вибачте, неправильно зрозуміли .... Думаючи про це.

За зовнішнім виглядом ви не можете змінити ім'я вузла. Ви можете спробувати створити новий XML-файл і дати їм різні імена або створити нові вузли.

СТАРИЙ *</ strong>

Використовуйте це в класі, де ви хочете це зробити:

Private Shared ReadOnly XMLFile As String = "LinkToYourXML"
Dim mappingDataXml As System.Xml.XmlDocument = New System.Xml.XmlDocument mappingDataXml.Load(XMLFile)

For Each node As System.Xml.XmlNode In mappingDataXml.SelectNodes("/genral/mynode/first")

node.SelectSongleNode("nodechild-first").InnerText = "The text you want to have in there."

Next

Сподіваюся, це може допомогти :)

СТАРИЙ *</ strong>


0 для відповіді № 3

Добре Це моє рішення проблеми, у моєму xml немає одного і того ж імені вузла двічі (тому кожен повинен вносити власні зміни, але основна ідея однакова

  Sub btnc_click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnc.Click



Dim xmldoc As XmlDocument = New XmlDocument()
xmldoc.Load(Server.MapPath("yuor xml path"))



Dim nodee As XmlNodeList = xmldoc.GetElementsByTagName(tempstr)//path to node

" parent element of the element we want to replace
Dim parentElement As XmlNode = nodee(0).ParentNode


" element we want to replace
Dim oldXmlNode As XmlNode = nodee(0)

" new element
Dim newXmlElement As XmlElement = xmldoc.CreateElement(txtdes.Value)

Dim temp As XmlAttribute = oldXmlNode.Attributes("id")//adding attirbute old->new


newXmlElement.Attributes.Append(temp)


Dim node As XmlNode = oldXmlNode.FirstChild node

buildtree(newXmlElement, xmldoc, node)//copy first child to new

node = node.NextSibling /taking next Sibling
While Not IsNothing(node)//while node has brothers

buildtree(newXmlElement, xmldoc, node)/copy Sibling old->new
node = node.NextSibling //next Sibling

End While


parentElement.ReplaceChild(newXmlElement, oldXmlNode)// making the switch




xmldoc.Save(Server.MapPath("path"))




End Sub


Sub buildtree(ByVal newnode As XmlNode, ByVal xmldoc As XmlDocument, ByVal oldxmlnode As XmlNode)

newnode.AppendChild(xmldoc.ImportNode(oldxmlnode, True))




End Sub