[英]Read and edit XML value
我想讀取和編輯參數名稱=“數據庫”旁邊的值字符串(Value =“ J:\\ Demo \\ Demo_Data_3.xml”)。
當我使用
XPathDocument xPathDoc = new XPathDocument(dashboardPath);
XPathNavigator navigator = xPathDoc.CreateNavigator();
while (navigator.MoveToFollowing("Parameters", ""))
我可以移至<Parameter>
但不能讀取或編輯值。 您有什么建議嗎?
XML來源
<?xml version="1.0" encoding="utf-8"?>
<Dashboard CurrencyCulture="en-US">
<Title Text="Dashboard" />
<DataSources>
<SqlDataSource ComponentName="dashboardSqlDataSource1">
<Name>Demo_Data_Excel</Name>
<Connection Name="testdata" ProviderKey="InMemorySetFull">
<Parameters>
<Parameter Name="database" Value="J:\Demo\Demo_Data_3.xml" />
<Parameter Name="read only" Value="1" />
<Parameter Name="generateConnectionHelper" Value="false" />
</Parameters>
</Connection>
<Query Type="TableQuery" Name="Data">
<Table Name="Data">
<Column Name="Market Segment" />
<Column Name="Market Subsegmt" />
<Column Name="Customer" />
</Table>
</Query>
<ResultSchema>
<DataSet Name="SQL Data Source 1">
<View Name="Data">
<Field Name="Market Segment" Type="String" />
<Field Name="Market Subsegmt" Type="String" />
</View>
</DataSet>
</ResultSchema>
</SqlDataSource>
</DataSources>
</Dashboard>
如果在程序的exe旁邊有一個名為TestFile.xml
的文件,則有兩種可能的方法。
第一:
var xDocument = XDocument.Load("TestFile.xml");
xDocument.XPathSelectElement(
"/Dashboard/DataSources/SqlDataSource/Connection/Parameters/Parameter[@Name='database']")
.Attribute("Value").SetValue("UpdatedPath");
xDocument.Save("TestFile_updated.xml");
第二:
var xDocument = XDocument.Load("TestFile.xml");
xDocument.Root.Elements("DataSources")
.Elements("SqlDataSource")
.Elements("Connection")
.Elements("Parameters")
.Elements("Parameter")
.Single(p => p.Attribute("Name").Value == "database")
.Attribute("Value")
.SetValue("UpdatedPath");
xDocument.Save("TestFile_updated.xml");
第二個假設您將始終只有一個Parameter
節點,其中Name="database"
。 您可能可以使用這些示例來更好地滿足您的個人需求。
使用XML Linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string xml =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<Dashboard CurrencyCulture=\"en-US\">" +
"<Title Text=\"Dashboard\" />" +
"<DataSources>" +
"<SqlDataSource ComponentName=\"dashboardSqlDataSource1\">" +
"<Name>Demo_Data_Excel</Name>" +
"<Connection Name=\"testdata\" ProviderKey=\"InMemorySetFull\">" +
"<Parameters>" +
"<Parameter Name=\"database\" Value=\"J:\\Demo\\Demo_Data_3.xml\" />" +
"<Parameter Name=\"read only\" Value=\"1\" />" +
"<Parameter Name=\"generateConnectionHelper\" Value=\"false\" />" +
"</Parameters>" +
"</Connection>" +
"<Query Type=\"TableQuery\" Name=\"Data\">" +
"<Table Name=\"Data\">" +
"<Column Name=\"Market Segment\" />" +
"<Column Name=\"Market Subsegmt\" />" +
"<Column Name=\"Customer\" />" +
"</Table>" +
"</Query>" +
"<ResultSchema>" +
"<DataSet Name=\"SQL Data Source 1\">" +
"<View Name=\"Data\">" +
"<Field Name=\"Market Segment\" Type=\"String\" />" +
"<Field Name=\"Market Subsegmt\" Type=\"String\" />" +
"</View>" +
"</DataSet>" +
"</ResultSchema>" +
"</SqlDataSource>" +
"</DataSources>" +
"</Dashboard>";
XDocument doc = XDocument.Parse(xml);
XElement database = doc.Descendants("Parameter").Where(x => (string)x.Attribute("Name") == "database").FirstOrDefault();
database.Attribute("Value").Value = "J:\\Demo\\Demo_Data_4.xml";
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.