我在下面有一个XML文档,并且<FormData>在这个标记中有一个标记,它被称为FormId ="d617a5e8-b49b-4640-9734-bc7a2bf05691"
我想在C#代码中更改该值?
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(MapPath(tempFolderPathAlt + "dvforms" + "\\XmlDataTemplate.xml"));
//Change value of FormID
xmlDoc.Save(tempFolderPath + "data.xml");
Run Code Online (Sandbox Code Playgroud)
是我的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>
Run Code Online (Sandbox Code Playgroud)
Pol*_*fun 28
有几种方法可以做到这一点,包括:
XmlAttribute formId = (XmlAttribute)xmlDoc.SelectSingleNode("//FormData/@FormId");
if (formId != null)
{
formId.Value = "newValue"; // Set to new value.
}
Run Code Online (Sandbox Code Playgroud)
或这个:
XmlElement formData = (XmlElement)xmlDoc.SelectSingleNode("//FormData");
if (formData != null)
{
formData.SetAttribute("FormId", "newValue"); // Set to new value.
}
Run Code Online (Sandbox Code Playgroud)
SelectSingleNode方法使用XPath来查找节点; 有有关XPath的一个很好的教程在这里.使用SetAttribute意味着如果FormId属性尚不存在,则将创建该属性,如果已存在则更新.
在这种情况下,FormData恰好是文档的根元素,因此您也可以这样做:
xmlDoc.DocumentElement.SetAttribute("FormId", "newValue"); // Set to new value.
Run Code Online (Sandbox Code Playgroud)
最后一个示例仅适用于您要更改的节点恰好是文档中的根元素的位置.
要匹配特定的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.
}
Run Code Online (Sandbox Code Playgroud)
请注意,最后一个示例中的select返回FormData元素而不是FormId属性; []括号中的表达式使我们能够搜索具有特定匹配属性的节点.
要选择正确的节点,请使用以下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;
}
Run Code Online (Sandbox Code Playgroud)