簡體   English   中英

C#如何foreach循環XML文檔和修改值

[英]C# how to foreach loop an XML document and modify a value

我有一個XML文檔,我想修改連接字符串。 如何執行foreach循環,並在此示例中修改LocalSqlServer的值?

<connectionStrings>
    <clear />
    <add name="Localip" connectionString="Data Source=db01;Initial Catalog=TestA;Integrated Security=True;"
     providerName="System.Data.SqlClient" />
    <add name="LocalSqlServer" connectionString="Data Source=db02;Failover Partner=db01;Initial Catalog=TestB;Integrated Security=True;"
     providerName="System.Data.SqlClient" />
    <add name="ServerAp" connectionString="Data Source=LAPTOP;Initial Catalog=testc;Integrated Security=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>

這是我嘗試過的方法,但是我真的只想修改值而不是整個內容。 對於此示例,我想更改:

<add name="LocalSqlServer" connectionString="Data Source=db02;Failover Partner=db01;Initial Catalog=TestB;Integrated Security=True;"
     providerName="System.Data.SqlClient" />

<add name="LocalSqlServer" connectionString="Data Source=db07;Failover Partner=db07;Initial Catalog=TestB;Integrated Security=True;"
     providerName="System.Data.SqlClient" />

這是我嘗試過的:

System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
        xmlDocument.Load(@"C:\xml.xml");
        XmlNodeList elemList = xmlDocument.GetElementsByTagName("connectionStrings");
        for (int i = 0; i < elemList.Count; i++)
        {
            foreach (XmlNode chldNode in elemList[i].ChildNodes)
            {
                Console.WriteLine(chldNode.Name.ToString());
                if (chldNode.Name.ToString() == "add")
                {
                    foreach (XmlAttribute xmlAtt in chldNode.Attributes)
                    {
                        if (xmlAtt.Value == "LocalSqlServer")
                        {
                            xmlAtt.InnerXml = "MyNewValue";
                            xmlDocument.Save(@"C:\xml2.xml");
                            break;
                        }
                    }
                }
            }
        }
var xDoc = XDocument.Load(@"C:\xml.xml")
var node = xDoc.XPathSelectElement("//add[@name='LocalSqlServer']");
node.Attribute("connectionString").Value = "some value";

或如SteveB所建議

var node = xDoc.XPathSelectElement("//connectionStrings/add[@name='LocalSqlServer']");

使用System.Xml.Linq

var xml = XDocument.Load(fileName);
var localSqlServer = xml.Descendants("connectionStrings").Elements("add").FirstOrDefault(o => o.Attribute("name").Value == "LocalSqlServer");
if (localSqlServer != null)
    localSqlServer.SetAttributeValue("connectionString", "Your New Connection String");
xml.Save(fileName);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM