Read and Update XML value using "SelectSingleNode" method. There are multiple methods of reading XML values and lots of time we do looping and reading node values one by one, I found very good of reading xml node values directly by using proper node path. Assume you have xml file from where you have to read the values. Read and Update node path will be changed based on the XML format. See some example below Sample XML 1 (File Name: "Sample.xml") <?xml version="1.0" encoding="utf-8" ?> <Root> <Employees DeptId="10"> <Info name="Ritesh" Id="100" salary="20000"></Info> <Info name="Kumar" Id="200" salary="30000"></Info> </Employees> <Employees DeptId="20"> <Info name="Kitesh" Id="100" salary="10000"></Info> <Info name="Gupta" Id="200" salary="20000"></Info> </Employees> </Root> C# Code for Reading XML File using System.Xml; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("Sample.xml"); //[OPERATION]:Read Employee info that belongs to Department Number 10 and Id is 100 XmlNode xmlNodeComponent = xmlDoc.SelectSingleNode("//Root/Employees[@DeptId='10']/Info[@Id='100']"); if (xmlNodeComponent != null) { string empName = xmlNodeComponent.Attributes["name"].Value; // Ritesh string empId = xmlNodeComponent.Attributes["Id"].Value; // 100 string empSalary = xmlNodeComponent.Attributes["salary"].Value; // 20000 } Update XML value with new value XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlFile); XmlNode xmlNodeComponent = xmlDoc.SelectSingleNode("//Root/Employees[@DeptId ='10']/Info[@Id='100']"); if (xmlNodeComponent != null) { //[OPERATION]: Update Employee salary who is belongs to Department Number 10 and Id is 100 xmlNodeComponent.Attributes["salary"].Value = "60000"; xmlDoc.Save(xmlFile); } Here another XML file sample with different type, the node path will be different to read node value. Sample XML 2 (File Name: "Sample.xml") <?xml version="1.0" encoding="utf-8" ?> <Root> <Employees DeptId="10" Id="100"> <name>Ritesh Kumar</name> <salary>2000</salary> <DOB>23-Jun-1980</DOB> </Employees> <Employees DeptId="20" Id="100"> <name>Kitesh Gupta</name> <salary>3000</salary> <DOB>12-Mar-1980</DOB> </Employees> </Root> C# Code for Reading XML File using System.Xml; XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("Sample.xml"); //[OPERATION]:Read Employee info that is belongs to Department Number 10 and Id is 100 XmlNode xmlNodeComponent = xmlDoc.SelectSingleNode("//Root/Employees[@DeptId='10'][@Id='100']"); if (xmlNodeComponent != null) { string empName = xmlNodeComponent.ChildNodes[0].InnerText; // Ritesh Kumar string empSalary = xmlNodeComponent.ChildNodes[1].InnerText; // 2000 string empDOB = xmlNodeComponent.ChildNodes[2].InnerText; // 23-Jun-1980 } Update XML value with new value XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlFile); XmlNode xmlNodeComponent = xmlDoc.SelectSingleNode(("//Root/Employees[@DeptId='10'][@Id='100']"); if (xmlNodeComponent != null) { //[OPERATION]: Update Employee salary who is belongs to Department Number 10 and Id is 100 xmlNodeComponent. ChildNodes[1].InnerText = "60000"; xmlDoc.Save(xmlFile); } Some other links for basic XML Operation |
Monday, March 21, 2011
Read and Update XML value using “SelectSingleNode” method.
Friday, March 11, 2011
MSBuild Fail Error: The path is already mapped in workspace WORKSPACE NAME
MSBuild Fail Error: The path is already mapped in workspace WORKSPACE NAME The complete error was "error: The path C:\Builds\RiteshTest\Sources is already mapped in workspace 2113_459_MachineName" This error occurs when you already have one Workspace defined for one Build definition and again you are trying to create new build definition on the same Workspace. To solve this error go to the build agent and change the working directory for your new Build Definition |
MSBuild Fail Error: The type 'Silverlight.Web.User' already contains a definition for 'DisplayName'
MSBuild Fail Error: The type 'Silverlight.Web.User' already contains a definition for 'DisplayName' I got this error when I was trying to make automated build for Silverlight 4.0 application using TFS 2010. The complete error was "Generated_Code\Models\Shared\User.shared.cs (13): The type 'MSIT.ES.SDPvNext.SilverlightUX.Web.User' already contains a definition for 'DisplayName'" I resolved this issues by changing Platform and Configuration combination on the TfsBuild.proj file previously it was "Release|x86" and on the Build Definition window, change the MSBuild Platform from Auto to x86. TfsBuild.proj <ItemGroup> <ConfigurationToBuild Include="Release|AnyCPU"> <FlavorToBuild>Release</FlavorToBuild> <PlatformToBuild>AnyCPU</PlatformToBuild> </ConfigurationToBuild> </ItemGroup> Build Definition Window |
MSBuild Fail Error: The Silverlight 4 SDK is not installed. Using TFS 2010
MSBuild Fail Error: The Silverlight 4 SDK is not installed. Using TFS 2010 The complete error was: "C:\Program Files (x86)\MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Silverlight.Common. targets(104,9): error : The Silverlight 4 SDK is not installed" I resolved this issue by changing MSBuild Platform Setting from Auto to X86 on the Build Definition Window. You need to make sure to avoid this error · Make sure you have Installed Silverlight 4 SDK on build server. · On the Build Definition window, change the MSBuild Platform from Auto to x86,as described here |
Thursday, March 10, 2011
Error: The type or namespace name 'UserRegistrationContext' could not be found (are you missing a using directive or an assembly reference?)
Error: The type or namespace name 'UserRegistrationContext' could not be found (are you missing a using directive or an assembly reference?) OR Error: Views\Login\RegistrationForm.xaml.cs (133): The type or namespace name 'CreateUserStatus' could not be found (are you missing a using directive or an assembly reference?) I got this error when I was trying to build Silverlight 4.0 project using by TFS 2010 MSBuild, I got this error when I was trying to build "Silverlight" Project then "Silverlight. Web" I solved this error by changing the order of the project file into MSBuild items, now first build "Silverlight. Web" then "Silverlight" project Build will be succeeded without any error |
No DLLs copied after build succeeded (TFS 2010 MSBuild with Visual Studio 2010)
No DLLs copied after build succeeded (TFS 2010 MSBuild with Visual Studio 2010) This is true when you do not have correct combination of Platform and Configuration selected on the Configurations to Builds section. I was trying to create automated build using TFS 2010 MSBuild process; I had setup all the required settings like Workspace, Build Template, and Items to build etc. After building process, it is generating "logs" folder inside my target folder and files. When I looked into log file its saying "Build Succeeded.", but when I see the DLLs on the target folder No DLLs found L Only Logs files exists. And Log file saying the configuration to build is not correct then I change the combination of Configuration and Platform to "Release" and "AnyCPU" (Remember it's not "Any CPU", NO SPACE) and start the build, Now I am getting all the DLLs into target folder. Regarding "Any CPU" space following article will talk about more http://stackoverflow.com/questions/3156278/need-some-help-with-tfs2010-an-automated-build-configurations-to-build-deb |
Tuesday, March 08, 2011
Generate SQL Server Insert Script by Stored Procedure
Generate SQL Server Insert Script by Stored Procedure --EXEC sp_generate_inserts TABELNAME --============================================================= SET NOCOUNT ON PRINT 'Checking for the existence of this procedure' IF (SELECT OBJECT_ID('sp_generate_inserts','P')) IS NOT NULL BEGIN PRINT 'Procedure already exists. So, dropping it' DROP PROC sp_generate_inserts END GO CREATE PROC sp_generate_inserts ( @table_name varchar(776), @target_table varchar(776) = NULL, @include_column_list bit = 1, @from varchar(800) = NULL, @include_timestamp bit = 0, @debug_mode bit = 0, @owner varchar(64) = NULL, @ommit_images bit = 0, @ommit_identity bit = 0, @top int = NULL, @cols_to_include varchar(8000) = NULL, @cols_to_exclude varchar(8000) = NULL ) AS BEGIN SET NOCOUNT ON IF ((@cols_to_include IS NOT NULL) AND (@cols_to_exclude IS NOT NULL)) BEGIN RAISERROR('Use either @cols_to_include or @cols_to_exclude. Do not specify both',16,1) RETURN -1 END IF ((@cols_to_include IS NOT NULL) AND (PATINDEX('''%''',@cols_to_include) =0)) BEGIN RAISERROR('Invalid use of @cols_to_include property',16,1) PRINT 'Specify column names surrounded by single quotes and separated by commas' PRINT 'Eg: EXEC sp_generate_inserts titles, @cols_to_include = "''title_id'', ''title''"' RETURN -1 END IF ((@cols_to_exclude IS NOT NULL) AND (PATINDEX('''%''',@cols_to_exclude) =0)) BEGIN RAISERROR('Invalid use of @cols_to_exclude property',16,1) PRINT 'Specify column names surrounded by single quotes and separated by commas' PRINT 'Eg: EXEC sp_generate_inserts titles, @cols_to_exclude = "''title_id'' ,''title''"' RETURN -1 END IF (parsename(@table_name,3)) IS NOT NULL BEGIN RAISERROR('Do not specify the database name. Be in the required database and just specify the table name.',16,1) RETURN -1 END IF @owner IS NULL BEGIN IF (OBJECT_ID(@table_name,'U') IS NULL) BEGIN RAISERROR('User table not found.',16,1) PRINT 'You may see this error, if you are not the owner of this table. In that case use @owner parameter to specify the owner name.' PRINT 'Make sure you have SELECT permission on that table.' RETURN -1 END END ELSE BEGIN IF NOT EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @table_name AND TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = @owner) BEGIN RAISERROR('User table not found.',16,1) PRINT 'You may see this error, if you are not the owner of this table. In that case use @owner parameter to specify the owner name.' PRINT 'Make sure you have SELECT permission on that table.' RETURN -1 --Failure. Reason: There is no user table with this name END END --Variable declarations DECLARE @Column_ID int, @Column_List varchar(8000), @Column_Name varchar(128), @Start_Insert varchar(786), @Data_Type varchar(128), @Actual_Values varchar(8000), @IDN varchar(128) --Variable Initialization SET @IDN = '' SET @Column_ID = 0 SET @Column_Name = 0 SET @Column_List = '' SET @Actual_Values = '' IF @owner IS NULL BEGIN SET @Start_Insert = 'INSERT INTO ' + '[' +RTRIM(COALESCE(@target_table, @table_name)) + ']' END ELSE BEGIN SET @Start_Insert = 'INSERT ' + '[' + LTRIM(RTRIM(@owner)) + '].' + '[' +RTRIM(COALESCE(@target_table,@table_name)) + ']' END --To get the first column's ID IF @owner IS NULL BEGIN SELECT @Column_ID = MIN(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK) WHERE TABLE_NAME = @table_name END ELSE BEGIN SELECT @Column_ID = MIN(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK) WHERE TABLE_NAME = @table_name AND TABLE_SCHEMA = @owner END --Loop through all the columns of the table, to get the column names --and their data types WHILE @Column_ID IS NOT NULL BEGIN IF @owner IS NULL BEGIN SELECT @Column_Name = '[' + COLUMN_NAME + ']', @Data_Type = DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK) WHERE ORDINAL_POSITION = @Column_ID AND TABLE_NAME = @table_name END ELSE BEGIN SELECT @Column_Name = '[' + COLUMN_NAME + ']', @Data_Type = DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK) WHERE ORDINAL_POSITION = @Column_ID AND TABLE_NAME = @table_name AND TABLE_SCHEMA = @owner END IF @cols_to_include IS NOT NULL --Selecting only user specified columns BEGIN IF CHARINDEX( '''' + SUBSTRING(@Column_Name,2,LEN(@Column_Name)-2) +'''',@cols_to_include) = 0 BEGIN GOTO SKIP_LOOP END END IF @cols_to_exclude IS NOT NULL --Selecting only user specified columns BEGIN IF CHARINDEX( '''' + SUBSTRING(@Column_Name,2,LEN(@Column_Name)-2) +'''',@cols_to_exclude) <> 0 BEGIN GOTO SKIP_LOOP END END --Making sure to output SET IDENTITY_INSERT ON/OFF in case the ---table has an IDENTITY column IF (SELECT COLUMNPROPERTY(OBJECT_ID(@table_name), SUBSTRING(@Column_Name,2,LEN(@Column_Name)- 2),'IsIdentity')) = 1 BEGIN IF @ommit_identity = 0 --Determing whether to include or exclude the IDENTITY column SET @IDN = @Column_Name ELSE GOTO SKIP_LOOP END --Tables with columns of IMAGE data type are not supported --for obvious reasons IF(@Data_Type in ('image')) BEGIN IF (@ommit_images = 0) BEGIN RAISERROR('Tables with image columns are not supported.',16,1) PRINT 'Use @ommit_images = 1 parameter to generate INSERTs for the rest of the columns.' PRINT 'DO NOT ommit Column List in the INSERT statements. If you ommit column list using @include_column_list=0, the generated INSERTs will fail.' RETURN -1 --Failure. Reason: There is a column with image data type END ELSE BEGIN GOTO SKIP_LOOP END END --making sure, not to lose any data from flot, real, money, smallmomey, --datetime columns SET @Actual_Values = @Actual_Values + CASE WHEN @Data_Type IN ('char','varchar','nchar','nvarchar') THEN ''''''''' + '+'COALESCE(REPLACE(RTRIM(' + @Column_Name +'), '''''''',''''''''''''),''nvkon©'')' + ' + ''''''''' WHEN @Data_Type IN ('datetime','smalldatetime') THEN ''''''''' + '+'COALESCE(RTRIM(CONVERT(char,' + @Column_Name +',109)), ''nvkon©'')' + ' + ''''''''' WHEN @Data_Type IN ('uniqueidentifier') THEN ''''''''' + '+'COALESCE(REPLACE(CONVERT(char(255),RTRIM(' + @Column_Name+ ')),'''''''',''''''''''''),''NULL'')' + ' + ''''''''' WHEN @Data_Type IN ('text','ntext') THEN ''''''''' + '+'COALESCE(REPLACE(CONVERT(char,' + @Column_Name +'), '''''''',''''''''''''),''NULL'')' + ' + ''''''''' WHEN @Data_Type IN ('binary','varbinary') THEN 'COALESCE(RTRIM(CONVERT(char,' + 'CONVERT(int,' + @Column_Name +'))),''NULL'')' WHEN @Data_Type IN ('timestamp','rowversion') THEN CASE WHEN @include_timestamp = 0 THEN '''DEFAULT''' ELSE 'COALESCE(RTRIM(CONVERT(char,' + 'CONVERT(int,' + @Column_Name +'))),''NULL'')' END WHEN @Data_Type IN ('float','real','money','smallmoney') THEN 'COALESCE(LTRIM(RTRIM(' + 'CONVERT(char, ' + @Column_Name + ',2)' +')),''NULL'')' ELSE 'COALESCE(LTRIM(RTRIM(' + 'CONVERT(char, ' + @Column_Name + ')' +')),''NULL'')' END + '+' + ''',''' + ' + ' --Generating the column list for the INSERT statement SET @Column_List = @Column_List + @Column_Name + ',' SKIP_LOOP: --The label used in GOTO IF @owner IS NULL BEGIN SELECT @Column_ID = MIN(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK) WHERE TABLE_NAME = @table_name AND ORDINAL_POSITION > @Column_ID END ELSE BEGIN SELECT @Column_ID = MIN(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS (NOLOCK) WHERE TABLE_NAME = @table_name AND ORDINAL_POSITION > @Column_ID AND TABLE_SCHEMA = @owner END --Loop ends here! END --To get rid of the extra characters that got concatened during the last run -- through the loop SET @Column_List = LEFT(@Column_List,len(@Column_List) - 1) SET @Actual_Values = LEFT(@Actual_Values,len(@Actual_Values) - 6) --Forming the final string that will be executed, to output the --INSERT statements IF (@include_column_list <> 0) BEGIN SET @Actual_Values = 'SELECT ' + CASE WHEN @top IS NULL OR @top < 0 THEN '' ELSE ' TOP ' + LTRIM(STR(@top)) + ' ' END + '''' + RTRIM(@Start_Insert) + ' ''+' + '''(' + RTRIM(@Column_List) + '''+' + ''')''' + ' +''VALUES(''+ ' + 'REPLACE(' + @Actual_Values + ',''''''nvkon©'''''',''NULL'')' + '+'')'''+ ' ' +COALESCE(@from,' FROM ' + CASE WHEN @owner IS NULL THEN '' ELSE '['+ LTRIM(RTRIM(@owner)) + '].' END + '[' + rtrim(@table_name) + ']' +'(NOLOCK)') END ELSE IF (@include_column_list = 0) BEGIN SET @Actual_Values = 'SELECT ' + CASE WHEN @top IS NULL OR @top < 0 THEN '' ELSE ' TOP ' +LTRIM(STR(@top)) + ' ' END + '''' + RTRIM(@Start_Insert) + ' '' +''VALUES(''+ ' + 'REPLACE(' + @Actual_Values + ',''''''nvkon©'''''', ''NULL'')' +'+'')''' + ' ' + COALESCE(@from,' FROM ' + CASE WHEN @owner IS NULL THEN '' ELSE '['+ LTRIM(RTRIM(@owner)) + '].' END + '[' + rtrim(@table_name) + ']' +'(NOLOCK)') END --Determining whether to ouput any debug information IF @debug_mode =1 BEGIN PRINT '/*****START OF DEBUG INFORMATION*****' PRINT 'Beginning of the INSERT statement:' PRINT @Start_Insert PRINT '' PRINT 'The column list:' PRINT @Column_List PRINT '' PRINT 'The SELECT statement executed to generate the INSERTs' PRINT @Actual_Values PRINT '' PRINT '*****END OF DEBUG INFORMATION*****/' PRINT '' END PRINT '' PRINT 'SET NOCOUNT ON' --Determining whether to print IDENTITY_INSERT or not IF (@IDN <> '') BEGIN PRINT 'SET IDENTITY_INSERT ' + '[' +RTRIM(COALESCE (@target_table,@table_name)) + ']' + ' ON' PRINT 'GO' END PRINT 'PRINT ''Inserting values into ' + '[' +RTRIM(COALESCE (@target_table,@table_name)) + ']' + '''' --All the hard work pays off here!!! You'll get your INSERT statements, -- when the next line executes! EXEC (@Actual_Values) PRINT 'PRINT ''Done''' IF (@IDN <> '') BEGIN PRINT 'SET IDENTITY_INSERT ' + '[' +RTRIM(COALESCE (@target_table,@table_name)) + ']' + ' OFF' PRINT 'GO' END PRINT 'SET NOCOUNT OFF' SET NOCOUNT OFF RETURN 0 --Success. We are done! END GO PRINT 'Created the procedure' GO SET NOCOUNT OFF GO PRINT 'Done' |
Subscribe to:
Posts (Atom)