如何在XML属性中选择某些内容?

时间:2014-07-14 15:17:59

标签: c# xml

我目前正在尝试替换xml文档中的某个字符串。我是通过Visual Studio使用C#来做到这一点的。我要替换的确切字符串是Data Source = some-hostData 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;"/>

我已设法选择并替换nameconnectionString的所有值,但我希望能够选择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}}的情况下这样做,因为某些主机部分可能会发生变化,我仍然希望能够编辑值而不必更改我的代码。

2 个答案:

答案 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字符串并修改它然后将所有内容连接在一起