изменить имя узла в XML с помощью XmlDocument - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть этот 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).

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

Спасиболюбая помощь

Ответы [ 3 ]

1 голос
/ 08 ноября 2011

Вы не можете просто изменить имя уже существующего узла.Что вам нужно сделать, это.

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

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

С уважением

0 голосов
/ 09 ноября 2011

ОК. Это мое решение проблемы, в моем 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
0 голосов
/ 08 ноября 2011

Извините, что неправильно понял ... Думая об этом.

Судя по всему, вы не можете изменить имя узла. Вы можете попробовать создать новый XML-файл и дать ему другое имя или создать новые узлы.

СТАРЫЙ *

Используйте это в классе, где вы хотите это сделать:

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

Надеюсь, это поможет:)

СТАРЫЙ *

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