我正在尝试通过Xpath和C#更改'test-data1'字符串。无法获得任何接近甚至获得第一的价值。
任何帮助表示赞赏。
<Dashboard>
<Title Text="view1" />
<DataSources>
<SqlDataSource Name="DS1" ComponentName="sqlDataSource1">
<Connection Name="DEV1" ConnectionString="test-data1" />
<Connection Name="DEV2" ConnectionString="test-data2" />
<ConnectionOptions CloseConnection="true" />
</SqlDataSource>
</DataSources>
</Dashboard>
我已经尝试过xml.XPathSelectElement("//SqlDataSource/Connection/@ConnectionString");
读取数据,但它为null。我想通过代码更改test-data1或test-data2。
答案 0 :(得分:0)
XPathSelectElement
将只能从文档中选择元素,而XPath试图选择属性。
因此,您可以选择这样的父元素,然后使用SetAttributeValue
来更改属性。
var connectionElement = xml.XPathSelectElement("//SqlDataSource/Connection[@Name='DEV1']");
connectionElement.SetAttributeValue("ConnectionString", "Hello, world");
如果您不知道连接的名称,则可以使用XPathSelectElements
来迭代Connection元素的集合以执行操作,这可能会返回许多与XPath匹配的元素。例如,如果您只想更改遇到的第一个Connection元素,则可以执行以下操作:
var connectionElement = xml.XPathSelectElements("//SqlDataSource/Connection").First();
connectionElement.SetAttributeValue("ConnectionString", "Hello, world");
在这种情况下,使用First()
来获取第一个连接元素-同样,您可以将ElementAt
与索引一起使用,或者使用任何其他Linq操作来定位所需的连接。
答案 1 :(得分:0)
XPathSelectElement
期望查询选择一个元素(XElement
)。您的xpath查询选择了一个属性,因此它不能很好地工作。这是修改连接字符串DEV1
的值的示例:
static void Main(string[] args)
{
var xml = @"<Dashboard>...</Dashboard>";
var document = XDocument.Parse(xml);
var item = document.XPathSelectElement("//SqlDataSource/Connection[@Name='DEV1']");
item.SetAttributeValue("ConnectionString", "new value");
Console.WriteLine(document.ToString());
//document.Save("");
}