У мене цей 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Ви не можете просто змінити назву вже існуючого вузла. Що вам потрібно зробити, це.
- Створіть новий вузол з потрібною назвою.
- Встановіть всі атрибути, що існували на вихідному вузлі, на новий вузол.
- Додайте новий вузол до оригінального документа або там, де ви його хочете.
- Виділіть усі дочірні елементи попереднього вузла та додайте їх до нового вузла.
- Видаліть старий вузол.
Я також повинен сказати вам, що ви не можете перейменувати файлкореневий вузол, якщо ви хочете це зробити, вам потрібно або перемкнути 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