2017-08-10 51 views
0

我有一個XML節點像下面如何找到XmlNode的參數值

<Parameter Name="TestId" Value="" /><Parameter Name="EntryDate" Value="" /><Parameter Name="formvalue" Value="DBATEST" /> 

現在,我必須在formvalue即一些變化替換「DBATEST」與「DBAPROD」。我想下面的代碼在C#

parametersNode.InnerXml.Replace("DBATEST", "DBAPROD"); 

上面的代碼整個XML的範圍及其替代「DBATEST」與formvalue「DBAPROD」外,而我只需要爲formvalue做。怎麼做?

回答

2
XmlDocument doc = new XmlDocument(); 
doc.LoadXml("<Parameters><Parameter Name=\"TestId\" Value=\"\" /><Parameter Name=\"EntryDate\" Value=\"\" /><Parameter Name=\"formvalue\" Value=\"DBATEST\" /></Parameters>"); 

XmlNode node = doc.SelectSingleNode("/Parameters/Parameter[@Name='formvalue' and @Value='DBATEST']"); 
node.Attributes["Value"].Value = "DBAPROD"; 

或者,你可以使用LINQ到XML找到確切Parameter節點你感興趣並更改屬性值,像這樣:

var parameters = XElement.Parse("<Parameters><Parameter Name=\"TestId\" Value=\"\" /><Parameter Name=\"EntryDate\" Value=\"\" /><Parameter Name=\"formvalue\" Value=\"DBATEST\" /></Parameters>"); 
var elements = parameters.Elements("Parameter"); 
var targetElement = elements.FirstOrDefault(e => e.Attribute("Name")?.Value == "formvalue" && e.Attribute("Value")?.Value == "DBATEST"); 

var targetAttribute = targetElement?.Attribute("Value"); 
if (targetAttribute != null) 
    targetAttribute.Value = "DBAPROD"; 
+0

如何獲得準確formvalue'的'值。我的價值觀可能會在後期階段發生變化。 – Lara

+0

我編輯了專門針對'formvalue'節點的答案。您應該簽出[通過XML中的多個屬性查找](https://stackoverflow.com/questions/353843/find-through-multiple-attributes-in-xml)以獲取更多信息 –

+0

當我在執行'doc.LoadXml(parametersNode .InnerXml)'我得到異常像'有多個根元素 '如何解決這個問題? – Lara

0

假設你的有效的XML是

<head> 
    <Parameter Name="TestId" Value="" /> 
    <Parameter Name="EntryDate" Value="" /> 
    <Parameter Name="formvalue" Value="DBATEST"></Parameter> 
</head> 

現在您可以使用xml-linq設置屬性值。

XDocument exisitngDoc = XDocument.Load(@"address/abc.xml"); 


exisitngDoc.Element("head").Elements("Parameter") 
    .Where(x => x.Attribute("Name").Value == "formvalue") 
.FirstOrDefault().SetAttributeValue("Value", "DBAPROD"); 

最後你需要保存。

exisitngDoc.Save(@"address/abc.xml"); 

結果

<hi> 
    <Parameter Name="TestId" Value="" /> 
    <Parameter Name="EntryDate" Value="" /> 
    <Parameter Name="formvalue" Value="DBAPROD"></Parameter> 
</hi>