CipherIS
asked on
C# Delete from XML
I have an XML with the following structure
Thanks
<?xml version="1.0" encoding="utf-8"?>
<Reports>
<personnel>
<key value="123">abc</key>
<key value="456">def</key>
</personnel>
<configuration>
<key value="789">ghi</key>
<key value="012">jkl</key>
</configuration>
</Reports>
I'm building an interface to allow users to maintain the XML allowing them to delete data from the XML file. I want them to be able to delete by Key. Thanks
ASKER
Yes. I'm create a GUI to allow the user to look at the values in a grid. The user will select one of the values from the XML on the Grid then delete it.
Also, this is a winform application. I'm adding, updating and need to delete data from a file. How would I serialize the XML? Examples I've seen for serialization is if I am getting the file from HTTP and streaming it and writing the file.
Also, this is a winform application. I'm adding, updating and need to delete data from a file. How would I serialize the XML? Examples I've seen for serialization is if I am getting the file from HTTP and streaming it and writing the file.
Do you already have the XML data loaded into a DataGridView? If so how are you doing this? Will the user need to click a button to actually do the delete?
ASKER
I will be loading the data onto the gridview. I'm using infragistics UltraGrid. The winforms will have a combobox which will contain: personnel, configuration.
The user will select one of the two (there will be a default selection). The data will displayed in the grid. The user will either delete from the grid or a button.
So, I just need to know how the selected row will delete the XML.
I'm still working on figuring out how to get the delete to work with the UltraGrid. I found the code with Infragistics working on getting it to fire. It needs to be added to initialize component. I opened an issue with this also.
The user will select one of the two (there will be a default selection). The data will displayed in the grid. The user will either delete from the grid or a button.
So, I just need to know how the selected row will delete the XML.
I'm still working on figuring out how to get the delete to work with the UltraGrid. I found the code with Infragistics working on getting it to fire. It needs to be added to initialize component. I opened an issue with this also.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks. I will try that. Also, you have provided me code before. I have a made modification to it.
Where you have
Also, comments have been made about serializing. I've read up on serializing. I'm adding, updating, and deleting. Can serialization be added for what I'm doing? I see how it can be added when I'm streaming a file across http but I'm not doing that.
Thanks.
Where you have
var result = xdoc.Root.Descendants("key").Where(v => v.Value == keyToDelete).ToList();
I changed tostring element = GetElement(type);
var result = xdoc.Root.Element(element).Descendants("key").Where(v => v.Value == keyToDelete).ToList();
This allows the key in the correct section to be found. I implemented this when utilizing the update code that you provided me to ensure that I was updating the correct key in the correct section.Also, comments have been made about serializing. I've read up on serializing. I'm adding, updating, and deleting. Can serialization be added for what I'm doing? I see how it can be added when I'm streaming a file across http but I'm not doing that.
Thanks.
Hi CipherIS;
As to the changes you made to the code snippet I posted that looks fine. As far as using serialize / deserialize of XML you can do that without sending it over a communications link. When you deserialize an XML you are taking and converting it to a Class object. and when you serialize the Class instance you convert that instance into XML. That XML can be on a disk or retrieved from a network. In this case IMHO it would be over kill.
As to the changes you made to the code snippet I posted that looks fine. As far as using serialize / deserialize of XML you can do that without sending it over a communications link. When you deserialize an XML you are taking and converting it to a Class object. and when you serialize the Class instance you convert that instance into XML. That XML can be on a disk or retrieved from a network. In this case IMHO it would be over kill.
ASKER
Thanks Fernando. I appreciate the feedback. I wasn't too sure and I was researching the heck out of it. I did find a nice site though.
http://httputility.net/xsd-to-csharp-vb-class.aspx
http://httputility.net/xsd-to-csharp-vb-class.aspx
The xsd.exe utitlity is part of Visual Studio and available on the Developer Command prompt.
Not a problem CipherIS, glad to help.
What do you mean by "interface"? While it is pretty clear in context with your tags, it makes not so much sense with "users". Do you mean an user interface (UI)?
I would use the .NET built-in XML serialization features. Thus you need a schema of your XML. Then you use the XML Schema Definition Tool (Xsd.exe) to generate the class. Then use XmlSerializer class to load your XML into an object graph. Delete your objects and write it back.