使用XmlDocument更改XML中的节点名称

时间:2011-11-08 15:21:57

标签: 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)。

目标名称节点和新名称节点的值由两个字符串变量表示。

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

您不能只更改已存在的节点的名称。你需要做的是。

  1. 使用所需名称创建新节点。
  2. 将原始节点上存在的所有属性设置为新节点。
  3. 将新节点附加到原始文档或您想要的位置。
  4. 选择上一节点中的所有子节点并将它们附加到新节点。
  5. 删除旧节点。
  6. 我还应该告诉你,你不能重命名根节点,如果你想这样做,你需要在5之后切换make 3.或者你需要将它插入到新的XMLDocument中,因为它赢了& #39; t允许你有两个根节点。

    此致

答案 1 :(得分:0)

抱歉误解了......想着它。

从外观上看,你无法改变节点名称。 您可以尝试创建一个新的XML文件,并在那里为它们指定不同的名称或创建新节点。

OLD *

在您要执行此操作的课程中使用此选项:

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

希望这可能有任何帮助:)

OLD *

答案 2 :(得分:0)

好这是我解决问题的方法,在我的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