I have an XML document below and there is a tag called <FormData> in side this tag it as an attribute called FormId=”d617a5e8-b49b-4640-9734-bc7a2bf05691″
I would like to change that value in C# code?
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(MapPath(tempFolderPathAlt + "dvforms" + "\\XmlDataTemplate.xml"));
//Change value of FormID
xmlDoc.Save(tempFolderPath + "data.xml");
Be is my XML document:
<?xml version="1.0"?>
<FormData Platform="Android" PlatformVersion="100" Version="966" DataVersion="1" Description="Investec - Res" FormId="d617a5e8-b49b-4640-9734-bc7a2bf05691" FileId="e6202ba2-3658-4d8e-836a-2eb4902d441d" EncryptionVerification="" CreatedBy="Bob" EditedBy="Bob">
<FieldData>
<request_details_export_template Mod="20010101010101" IncludeInPDFExport="Yes"></request_details_export_template>
<request_details_reason_for_valuatio Mod="20010101010101" IncludeInPDFExport="Yes"></request_details_reason_for_valuatio>
</FieldData>
<Photos Mod="20010101010101"/>
<VoiceNotes/>
<Drawings Mod="20010101010101"/>
<FieldNotes/>
</FormData>
There are several ways of doing this, including:
Or this:
The SelectSingleNode method uses XPath to find the node; there is a good tutorial about XPath here. Using SetAttribute means the FormId attribute will be created if it does not already exist, or updated if it does already exist.
In this case, FormData happens to be the document’s root element, so you can also do this:
This last example will only work where the node you are changing happens to be the root element in the document.
To match a specific FormId guid (it is not clear if this is what you wanted):
Note that the select in this last example returns the FormData element and not the FormId attribute; the expression in [] brackets enables us to search for a node with a particular matching attribute.