簡體   English   中英

讀取和編輯XML值

[英]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.

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