我目前正在尝试替换xml文档中的某个字符串。我是通过Visual Studio使用C#来做到这一点的。我要替换的确切字符串是Data Source = some-host
到Data Source = local-host
。该字符串位于我的字符串的属性下。但是,属性connectionString
下面有许多值。
<Strings>
<add name="Cimbrian.Data.ConnectionString" connectionString="Data Source=some-host;Integrated Security=false;pooling=true;Min Pool Size=5;Max Pool Size=400;Connection Timeout=5;"/>
我已设法选择并替换name
和connectionString
的所有值,但我希望能够选择Data Source = some-host
来替换。XmlNode ConnectNode = Incident.SelectSingleNode("//Strings");
XmlNode add1 = ConnectNode.FirstChild;
add1.Attributes[1].Value = "THIS REPLACES ALL OF CONNECTION STRING";
。
加载文档后,我的代码目前看起来像这样,
Data Source = some-host
但正如字符串值所示,它正在取代远远超出我想要的范围。任何帮助,将不胜感激。如果有点难以理解,请道歉。
编辑 - 我忘了提及如果可能的话我想在没有搜索特定字符串{{1}}的情况下这样做,因为某些主机部分可能会发生变化,我仍然希望能够编辑值而不必更改我的代码。
答案 0 :(得分:2)
这与XML无关 - 就XML而言,属性的值本身是一个以分号分隔的列表这一事实是无关紧要的。如果您自己拥有连接字符串,则会遇到同样的问题。
您可以使用SqlConnectionStringBuilder
来提供帮助:
var builder = new SqlConnectionStringBuilder(currentConnectionString);
builder.DataSource = "some other host";
string newConnectionString = builder.ToString();
这意味着,如果您只使用some-host
,则无需依赖string.Replace
(和间距)的当前精确值。
答案 1 :(得分:1)
如果您确切知道要替换的内容,可以使用替换方法:
string string2 = string1.Replace("x", "y");
这将找到x的所有实例,并将其替换为string1
中的y编辑:
您的具体代码如下所示:
add1.Attributes[1].Value = add1.Attributes[1].Value.Replace("Data Source = some-host","Data Source = local-host");
编辑2:
好的,基于你的评论我会在分号上拆分字符串,然后迭代找到DataSource字符串并修改它然后将所有内容连接在一起