正在更改XML文件中的值

本文关键字:文件 XML | 更新日期: 2023-09-27 18:27:03

我需要更改配置.xml中的密码值。

以下用户的密码需要更改:

  1. tsuer1
  2. github
  3. wtsntro
  4. wtsntrw等等

configuration.xml文件的格式如下:

<?xml version="1.0" encoding="UTF-8"?>
<server xmlns="urn:jboss:domain:1.2">
  <extensions>
    <extension module="org.jboss.as.clustering.infinispan" />
    <extension module="org.jboss.as.cmp" />
    <extension module="org.jboss.as.ejb3" />
  </extensions>
  <system-properties>
    <property name="SERVER" value="JBOSS" />
    <property name="FTP_USER" value="adobenet'wtsntrw" />
    <property name="FTP_PASSWORD" value="password value" />
    <property name="FTP_READ_USER" value="adobenet''wtsntro" />
    <property name="FTP_READ_PASS" value="password value" />
    <property name="API_SECRET_KEY" value="wxrocks" />
    <property name="API_ENV" value="regular" />
    <property name="PRERELEASE_PASSWORD" value="prerelease" />
    <property name="watson.git_user" value="github" />
    <property name="watson.git_pwd" value="password value" />
    <property name="teststudio.user" value="tsuser1" />
    <property name="teststudio.pwd" value="password value" />
  </system-properties>
</server>

下面是我尝试但失败的代码:

XmlDocument doc = new XmlDocument();
            string path = @"C:'Users'karansha'Desktop'configuration.xml";  // location of configuration.xml file.
            doc.Load(path);
            // Using foreach loop for specific Xmlnodes.
            foreach (XmlNode selectNode in doc.SelectNodes("server/system-properties/property"))
            {
                if (selectNode.Attributes["name"].Value == "teststudio.pwd")  // tsuser1
                {
                    selectNode.Attributes["value"].Value = "new password";  // changes password value for "FTP_USER".
                }
                if (selectNode.Attributes["name"].Value == "watson.git_pwd")   //github
                {
                    selectNode.Attributes["value"].Value = "new passwordx";  // changes password value for "FTP_READ_USER".
                }
                if (selectNode.Attributes["name"].Value == "FTP_READ_PASS")   // wtsntro
                {
                    selectNode.Attributes["value"].Value = "new_passwordy";  // changes password value for "FTP_PASSWORD".
                }
            }
            doc.Save(path);  // Save changes.
            Console.WriteLine("Password changed successfully");
            Console.ReadLine();

正在更改XML文件中的值

您的Xml元素包含在NameSpace中,因此您的XPath需要考虑到这一点。

参见:

具有名称空间的XML文档上的XPath

XML名称空间及其对XPath和XSLT的影响

XmlDocument doc = new XmlDocument();
doc.Load(path);
var nm = new XmlNamespaceManager(doc.NameTable);
nm.AddNamespace("jb", "urn:jboss:domain:1.2");
foreach (XmlNode selectNode in doc.SelectNodes("jb:server/jb:system-properties/jb:property", nm))
{
    if (selectNode.Attributes["name"].Value == "teststudio.pwd")  // tsuser1
    {
        selectNode.Attributes["value"].Value = "new password";  // changes password value for "FTP_USER".
    }
    if (selectNode.Attributes["name"].Value == "watson.git_pwd")   //github
    {
        selectNode.Attributes["value"].Value = "new passwordx";  // changes password value for "FTP_READ_USER".
    }
    if (selectNode.Attributes["name"].Value == "FTP_READ_PASS")   // wtsntro
    {
        selectNode.Attributes["value"].Value = "new_passwordy";  // changes password value for "FTP_PASSWORD".
    }
}
doc.Save(path);  // Save changes.
Console.WriteLine("Password changed successfully");

您必须指定名称空间:

var nm = new XmlNamespaceManager(doc.NameTable);
if (doc.ChildNodes.Count != 2)
    throw new XmlException("Document is not well formated.");
var serverNode = doc.ChildNodes[1];
nm.AddNamespace("a", serverNode.NamespaceURI);
foreach (XmlNode selectNode in 
    doc.SelectNodes("a:server/a:system-properties/a:property", nm))
{
    // ...
}