2012-10-26 26 views
19

मैं नीचे एक XML दस्तावेज है और वहाँ एक टैग टीम में <FormData> इस टैग को एक विशेषता FormId = "d617a5e8-b49b-4640-9734-bc7a2bf05691" कहा जाता है यह रूप में बुलाया हैकिसी XML दस्तावेज़ में किसी विशेषता का मान कैसे बदलें?

मुझे लगता है कि मूल्य परिवर्तन करना चाहते हैं सी # कोड में?

XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.Load(MapPath(tempFolderPathAlt + "dvforms" + "\\XmlDataTemplate.xml")); 
    //Change value of FormID 
    xmlDoc.Save(tempFolderPath + "data.xml"); 

बनें मेरी XML दस्तावेज़ है:

<?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> 

उत्तर

23

ऐसा करने के कई तरीके हैं, जैसे:

XmlAttribute formId = (XmlAttribute)xmlDoc.SelectSingleNode("//FormData/@FormId"); 
if (formId != null) 
{ 
    formId.Value = "newValue"; // Set to new value. 
} 

या इस:

XmlElement formData = (XmlElement)xmlDoc.SelectSingleNode("//FormData"); 
if (formData != null) 
{ 
    formData.SetAttribute("FormId", "newValue"); // Set to new value. 
} 

SelectSingleNode विधि खोजने के लिए XPath का उपयोग करता है नोड; XPath here के बारे में एक अच्छा ट्यूटोरियल है। SetAttribute का उपयोग करना मतलब है कि FormId विशेषता बनाई जाएगी यदि यह पहले से मौजूद नहीं है, या अपडेट किया गया है यदि यह पहले से मौजूद है।

इस मामले में, FormData दस्तावेज़ के मूल तत्व होता है, तो आप भी ऐसा कर सकते हैं:

xmlDoc.DocumentElement.SetAttribute("FormId", "newValue"); // Set to new value. 

यह पिछले उदाहरण केवल काम करेगा जहाँ नोड आप बदल रहे हैं में मूल तत्व होता है दस्तावेज़।

एक विशिष्ट FormId GUID मिलान करने के लिए (यह स्पष्ट नहीं है कि अगर यह है कि तुम क्या चाहते थे है):

XmlElement formData = (XmlElement)xmlDoc.SelectSingleNode("//FormData[@FormId='d617a5e8-b49b-4640-9734-bc7a2bf05691']"); 
if (formData != null) 
{ 
    formData.SetAttribute("FormId", "newValue"); // Set to new value. 
} 

ध्यान दें कि यह पिछले उदाहरण में चुनिंदा FormData तत्व और नहीं FormId विशेषता देता है; [] ब्रैकेट्स में अभिव्यक्ति हमें किसी विशेष मिलान विशेषता वाले नोड की खोज करने में सक्षम बनाती है।

+1

+1 XPaths की सिफारिश के लिए, वहाँ बहुत सी जानकारी के लिए XPaths पर Google और यह आमतौर पर प्रत्येक नोड को पार करने की कोशिश करने से बेहतर होता है। –

+0

धन्यवाद महान उत्तर +1 – Pomster

1

या आप पेड़ को स्पष्ट रूप से चल सका:

xmlDoc.DocumentElement.GetAttribute("FormId").Value = ""; 
+0

+1। ध्यान दें कि यह मानता है कि FormId विशेषता पहले से मौजूद है; वैकल्पिक रूप से, "xmlDoc.DocumentElement.SetAttribute (" FormId "," newValue ");" FormId जोड़ देगा यदि यह पहले से मौजूद नहीं है, या यदि यह करता है तो इसे बदलें। – Polyfun

+0

यूप, यह एक बहुत ही सरल उदाहरण है, लेकिन आप इसे अपने उद्देश्य के लिए बदल सकते हैं। – Davio

4

XPath //Node[@Attribute='value'] निम्नलिखित सही नोड उपयोग का चयन करें।

आपके मामले में कोड की याद आ रही टुकड़ा दिखाई देगा:

var formId = "d617a5e8-b49b-4640-9734-bc7a2bf05691"; 
var newId = "[set value here]"; 

var xpath = String.Format("//FormData[@FormId='{0}']", formId); 

XmlNode node = xmlDoc.SelectSingleNode(xpath); 

if(node != null) 
{ 
    node.Attributes["FormId"].Value = newId; 
} 

XPath reference देखें या इस tutorial की जाँच करें।

+0

+1 यह दिखाने के लिए कि किसी विशिष्ट guid से मेल खाने वाले फ़ॉर्मआईड की खोज कैसे करें। – Polyfun

1
XDocument doc = XDocument.Load(m_pFileName);     
XElement xElemAgent = doc.Descendants("TRAINEE") 
.Where(arg => arg.Attribute("TRAINEEID").Value == m_pTraineeID.ToString()).Single(); 
xElemAgent.SetAttributeValue("FIRSTNAME",m_pFirstName); 
xElemAgent.SetAttributeValue("LASTNAME", m_pLastName); 
xElemAgent.SetAttributeValue("DOB",m_pDOB); 
xElemAgent.SetAttributeValue("UNIQUEID",m_pUniqueID); 
doc.Save(m_pFileName); 
1

सबसे अच्छा तरीका है setAttribute विधि का उपयोग एक समारोह है कि कहीं भी उपयोग किया जा सकता आप की तरह बनाने के लिए कर सकते हैं:

public void ReplaceXMLAttributeValueByIndex(string fullFilePath, string nodeName, int index, string valueToAdd) 
    { 
     FileInfo fileInfo = new FileInfo(fullFilePath); 
     fileInfo.IsReadOnly = false; 
     fileInfo.Refresh(); 

     XmlDocument xmldoc = new XmlDocument(); 
     xmldoc.Load(fullFilePath); 
     try 
     { 
      XmlNode node = xmldoc.SelectSingleNode(nodeName); 
      node.Attributes[index].Value = valueToAdd; 
     } 
     catch (Exception ex) 
     { 
      //add code to see the error 
     } 
     xmldoc.Save(fullFilePath); 
    } 
संबंधित मुद्दे