Solved

vb.net XML edit in form..

Posted on 2010-08-19
11
221 Views
Last Modified: 2012-05-10
Hello.. I have some problem. Start from the beginning..

I have XML-File


looks like this...


<?xml version="1.0" encoding="utf-8"?>
<tagdata>
  <readopcvalues>
    <value opctag="TEST.AI_Weight_KL3" />
    <value opctag="TEST._produktion" />
    <value opctag="SystemVariables.ServerTime" />
  </readopcvalues>
</tagdata>



What I would like to do first is have the change to add some new tags to my taglist..

tex. add this..

<value opctag="TEST.Goood" />


<?xml version="1.0" encoding="utf-8"?>
<tagdata>
  <readopcvalues>
    <value opctag="TEST.AI_Weight_KL3" />
    <value opctag="TEST._produktion" />
    <value opctag="SystemVariables.ServerTime" />
    <value opctag="TEST.Goood" />
  </readopcvalues>
</tagdata>




I have done this with this code but dosent get really waht I want.. The problem is that I always starts a new nodes and not write in the old one...

look


<?xml version="1.0" encoding="utf-8"?>
<tagdata>
  <readopcvalues>
    <value opctag="TEST.AI_Weight_KL3" />
    <value opctag="TEST._produktion" />
    <value opctag="SystemVariables.ServerTime" />
   </readopcvalues>
  <value opctag="TEST.Goood" />
</tagdata>




This is the code...

   '-- Declare local variable and load xml file
        Dim doc2 As New XmlDocument()
        doc2.Load("XML\TagData.xml")

        '-- Create a new node and add it to the document.
        Dim newline As XmlElement = doc2.CreateElement("value")

        newline.SetAttribute("opctag", "PLC.Beijer_Agnesberg.OP_Dagens_produktion")

        doc2.DocumentElement.AppendChild(newline)
        '-- Save the xml file with the new changes.
        doc2.Save("XML\TagData.xml")



Please give me some tips.. My follow question is that I wolud like to show the Whole XML lines in textboxes..
like this.

textbox1.text =  <value opctag="TEST.Goood" />
textbox2.text =    <value opctag="TEST.AI_Weight_KL3" />

Why I want this it´s because I wolud like to edit the old line.. or add a new line.. or remove one..
I hope someone understand! But first we take the easy party to write in the same nod! :D

//Kavvis
0
Comment
Question by:kavvis
  • 6
  • 5
11 Comments
 
LVL 27

Expert Comment

by:nmarun
Comment Utility
0
 

Author Comment

by:kavvis
Comment Utility
Arun  thank you but I really dont know how to use this info into my code....
any other idees?
0
 
LVL 27

Expert Comment

by:nmarun
Comment Utility
This is what I'm talking.

Arun

private static void UpdateXml()

{

    string xmlPath = @"C:\Arun\Projects\ConsoleTest\ConsoleTest\Response.xml";



    DataSet dataSet = new DataSet();

    dataSet.ReadXml(xmlPath);

    dataSet.AcceptChanges();

    // <value opctag="TEST.Goood" />

    DataRow readopcvaluesRow = dataSet.Tables["readopcvalues"].Rows[0];

    DataRow newRow = dataSet.Tables["value"].NewRow();

    newRow["opctag"] = "Test.Gooood";

    dataSet.Tables["value"].Rows.Add(newRow);

    newRow.SetParentRow(readopcvaluesRow);

    dataSet.WriteXml(xmlPath, XmlWriteMode.IgnoreSchema);

}

Open in new window

0
 
LVL 27

Expert Comment

by:nmarun
Comment Utility
And here's the vb.net version.

Arun

Private Shared Sub UpdateXml()

	Dim xmlPath As String = "C:\Arun\Projects\ConsoleTest\ConsoleTest\Response.xml"



	Dim dataSet As New DataSet()

	dataSet.ReadXml(xmlPath)

	dataSet.AcceptChanges()

	' <value opctag="TEST.Goood" />

	Dim readopcvaluesRow As DataRow = dataSet.Tables("readopcvalues").Rows(0)

	Dim newRow As DataRow = dataSet.Tables("value").NewRow()

	newRow("opctag") = "Test.Gooood"

	dataSet.Tables("value").Rows.Add(newRow)

	newRow.SetParentRow(readopcvaluesRow)

	dataSet.WriteXml(xmlPath, XmlWriteMode.IgnoreSchema)

End Sub

Open in new window

0
 

Author Comment

by:kavvis
Comment Utility
Arun

OJ!! Thank you! Verry mutch!
It works greate!

Can I somehow remove on of lines tags in some simple way to?

I will give you the points just want to know some more info if you have before I close it! :D
/kavvis

0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 27

Expert Comment

by:nmarun
Comment Utility
And here's the second part of your question.

Arun

Private Shared Sub ReadInnerXml()

	Dim xmlPath As String = "C:\Arun\Projects\ConsoleTest\ConsoleTest\Response.xml"



	Dim xDocument__1 As XDocument = XDocument.Load(xmlPath)



	Dim valueXmlList As List(Of String) = (From value In xDocument__1.Descendants("value")value.ToString()).ToList()



	For i As Integer = 0 To valueXmlList.Count - 1

		Console.WriteLine(valueXmlList(i))

	Next

End Sub

Open in new window

0
 

Author Comment

by:kavvis
Comment Utility
nmarun:  I can´t really get that to work my friend...
0
 
LVL 27

Accepted Solution

by:
nmarun earned 500 total points
Comment Utility
Try this.

Arun

Private Shared Sub RemoveXmlNode()

	Dim xmlPath As String = "C:\Arun\Projects\ConsoleTest\ConsoleTest\Response.xml"



	Dim dataSet As New DataSet()

	dataSet.ReadXml(xmlPath)

	dataSet.AcceptChanges()

	' <value opctag="TEST.Goood" />



	For i As Integer = 0 To dataSet.Tables("value").Rows.Count - 1

		If dataSet.Tables("value").Rows(i)("opctag").Equals("Test.Gooood") Then

			dataSet.Tables("value").Rows(i).Delete()

			dataSet.Tables("value").Rows(i).AcceptChanges()

		End If

	Next



	dataSet.WriteXml(xmlPath, XmlWriteMode.IgnoreSchema)

End Sub

Open in new window

0
 
LVL 27

Expert Comment

by:nmarun
Comment Utility
What are you getting?

Arun
0
 

Author Comment

by:kavvis
Comment Utility
Sorry it was my bad!
that line worked perfekt!

Can I ask one more question..

If I want to show   " <value opctag="Test.Gooood" /> "  in a textbox

just to show all the lines... so I can se what the diffrent rows I have...
so I can delete or replace one of the line easy...

How do I do that the best way?

I have tried to make the whole XML dokumet to a long string and then
like this

textbox1.text = doc.tostring.substring(0.10)
textbox2.text = doc.tostring.substring(23.34)

but that dosent work.. so please tips me then I can close this question and give booth points! :D
0
 

Author Closing Comment

by:kavvis
Comment Utility
Thank you!
everythin works very well now!
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

Recently while returning home from work my wife (another .NET developer) was murmuring something. On further poking she said that she has been assigned a task where she has to serialize and deserialize objects and she is afraid of serialization. Wha…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

743 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now