我有以下xml文件
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfParams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Params Key="Domain" Value="User123">
<Variable>
<Name>Domain</Name>
<Type>String</Type>
<Value>User123</Value>
</Variable>
</Params>
<Params Key="Password" Value="Password123">
<Variable>
<Name>Password</Name>
<Type>String</Type>
<Value>Password123</Value>
</Variable>
</Params>
<Params Key="Username" Value="Domain123">
<Variable>
<Name>Username</Name>
<Type>String</Type>
<Value>Domain123</Value>
</Variable>
</Params>
</ArrayOfParams>
我想将密码从Password123
更改为NewPassword123
应该在2个地方更改xml:
<Params Key="Password" Value="Password123">
和
<Value>Password123</Value>
如何做到这一点?
编辑 XML已经存在,而不是我的设计。我只需要改变它
我尝试使用XDocument,但我遇到了查询问题。 你能提供知道如何查询它的linq吗?
答案 0 :(得分:1)
如何使用LINQ to XML?
var doc = XDocument.Parse(xmlString);
var passwordParams = doc.Root.Elements("Params").SingleOrDefault(e => (string)e.Attribute("Key") == "Password");
if(passwordParams != null)
{
passwordParams.Attribute("Value").Value = newPasswordString;
passwordParams.Element("Variable").Element("Value").Value = ewPasswordString;
}
之后,您可以将文档保存在任何地方。
我现在无法测试,但一般的想法应该是明确的。
答案 1 :(得分:0)
这将是一种方法 - 使用“旧”样式XmlDocument
类,它将整个XML加载到内存中,并允许您“导航”其结构。如果您的XML不是太大(如此处),则可以正常工作。
// create XML document and load contents from file
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"D:\temp\test.xml"); // adapt this to your own path!
// get the <Params> node with the Key=Password attribute
XmlNode paramsNode = xdoc.SelectSingleNode("/ArrayOfParams/Params[@Key='Password']");
if (paramsNode != null)
{
// set the value of the "Value" attribute to the new password
paramsNode.Attributes["Value"].Value = "NewPassword123";
// get the "Variable/Value" subnode under that <Params> node
XmlNode valueSubnode = paramsNode.SelectSingleNode("Variable/Value");
if (valueSubnode != null)
{
valueSubnode.InnerText = "NewPassword123";
// save XmlDocument back out to a new file name
xdoc.Save(@"D:\temp\modified.xml");
}
}
答案 2 :(得分:0)
使用System.Xml.XmlDocument:
非常容易XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml(source);
XmlNode password = xmlDocument.SelectSingleNode("//Params[@Key='Password']");
password.Attributes["Value"] = "NewPassword123";
XmlNode value = password.SelectSingleNode("./Value");
value.InnerXml = "NewPassword123";
string source = xmlDocument.OuterXml;
xmlDocument.Save(destPath);
希望这会对你有所帮助。