0

次の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 xml は 2 か所で変更する必要があります。

<Params Key="Password" Value="Password123">

<Value>Password123</Value>

これはどのように行うことができますか?

私のデザインではなく、既に存在する XML を編集します。私はちょうどそれを変更する必要があります

XDocument を使用しようとしましたが、クエリに問題があります。それを照会する方法を知っているlinqを提供できますか?

4

3 に答える 3

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;
}

その後、ドキュメントを好きな場所に保存できます。

今はテストできませんが、一般的な考え方は明らかです。

于 2012-12-23T09:45:35.340 に答える
0

XmlDocumentこれは、XML全体をメモリにロードし、その構造を「ナビゲート」できるようにする「古い」スタイルクラスを使用して、それを行う1つの方法です。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");
    }
}
于 2012-12-23T09:45:55.917 に答える
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);

これがお役に立てば幸いです。

于 2012-12-23T09:46:05.610 に答える