Adding Attributes to XML node using VBA
-
No that is not the way to go, you are making things harder for your self, you will then have to read, parse, inject , save strings. You have already got a function that generates a valid XML file, so you are 99% of the way there. Have you done what i have suggested with regards to breakpoints and or debug statements? strategically place them in your code, and you will see where the attributes you have added are then disappearing (if they are disappearing at all that is). Also, in the previous message did you replace both instances of the code where you inject the attribute function? you have 2 lines that do it depending on the state of some value. Did you please a debug statement in your attribute function to prove it is being called? Did you add a debug.print statement to see what it was adding to the string?
Dave Don't forget to rate messages!
Find Me On: Web|Facebook|Twitter|LinkedIn
Waving? dave.m.auld[at]googlewave.comDave, <pre attribute="vb"> Yes I did debut and breakpoints. Actually I have to keep getNodeAttribute function in the first set not in the second set. I examined that. During call of the above function i print the var in immediate window. it is printing like : Attribute=1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" Attribute2=" but when it go back to the main line from where are calling the function it is not returning anything.. Hope u might got my explanation..pls help This is my function: Function getNodeAttributes(node As String) As String dim str_att as string If node = "Policy_Years" Then str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2=""" ElseIf node = "Loss_Descriptions" Then str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2=""" Debug.Print str_att End If End Function Calling the above function from the below line: strXML = strXML & "<" & Nodes(t) & getNodeAttributes(Nodes(t)) & ">" I wanted output like: <Adjusted_Loss_PD Attribute="1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" Attribute2=""> <Adjusted_Loss_PD-1 /> <Adjusted_Loss_PD-2 /> <Adjusted_Loss_PD-3 /> <Adjusted_Loss_PD-4 /> <Adjusted_Loss_PD-5 /> <Adjusted_Loss_PD-6 /> <Adjusted_Loss_PD-7 /> <Adjusted_Loss_PD-8 /> <Adjusted_Loss_PD-9 /> <Adjusted_Loss_PD-10 /> </Adjusted_Loss_PD> </pre>
-
Dave, <pre attribute="vb"> Yes I did debut and breakpoints. Actually I have to keep getNodeAttribute function in the first set not in the second set. I examined that. During call of the above function i print the var in immediate window. it is printing like : Attribute=1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" Attribute2=" but when it go back to the main line from where are calling the function it is not returning anything.. Hope u might got my explanation..pls help This is my function: Function getNodeAttributes(node As String) As String dim str_att as string If node = "Policy_Years" Then str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2=""" ElseIf node = "Loss_Descriptions" Then str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2=""" Debug.Print str_att End If End Function Calling the above function from the below line: strXML = strXML & "<" & Nodes(t) & getNodeAttributes(Nodes(t)) & ">" I wanted output like: <Adjusted_Loss_PD Attribute="1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" Attribute2=""> <Adjusted_Loss_PD-1 /> <Adjusted_Loss_PD-2 /> <Adjusted_Loss_PD-3 /> <Adjusted_Loss_PD-4 /> <Adjusted_Loss_PD-5 /> <Adjusted_Loss_PD-6 /> <Adjusted_Loss_PD-7 /> <Adjusted_Loss_PD-8 /> <Adjusted_Loss_PD-9 /> <Adjusted_Loss_PD-10 /> </Adjusted_Loss_PD> </pre>
It looks like you are missing quotes from the output string. As you already know, you have to increase the number of quotes if you want to add quotes to the output, you are only doing this in some of your code.
priyaahh wrote:
str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2="""
Look at the code after "Attribute=" the opening value only has a single double quote, which will result in Attribute=1,1,....etc. and not Attribute="1,1,...etc. yet at the end you correctly add the extra quotes. you can always consider user Char(34) in you string generator so you can see where you want to add the quote to the output e.g. (34 is the ASCII value for a double quote, look at asciitable[^])
str_Att = "Attribute1=" & chr(34) & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" & chr(34) & " Attribute2=" & chr(34) & "some value" & chr(34)
Dave Don't forget to rate messages!
Find Me On: Web|Facebook|Twitter|LinkedIn
Waving? dave.m.auld[at]googlewave.com -
It looks like you are missing quotes from the output string. As you already know, you have to increase the number of quotes if you want to add quotes to the output, you are only doing this in some of your code.
priyaahh wrote:
str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2="""
Look at the code after "Attribute=" the opening value only has a single double quote, which will result in Attribute=1,1,....etc. and not Attribute="1,1,...etc. yet at the end you correctly add the extra quotes. you can always consider user Char(34) in you string generator so you can see where you want to add the quote to the output e.g. (34 is the ASCII value for a double quote, look at asciitable[^])
str_Att = "Attribute1=" & chr(34) & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" & chr(34) & " Attribute2=" & chr(34) & "some value" & chr(34)
Dave Don't forget to rate messages!
Find Me On: Web|Facebook|Twitter|LinkedIn
Waving? dave.m.auld[at]googlewave.com -
Hi Dave, Yes I have noticed that and changed...but why the function is not returning anything. Regards, Priya.
Because you haven't returned a value yet! remember you need to set the function name to the value you want to return;
Function getNodeAttributes(node As String) As String
'Do whatever you need
'Return the output to the caller
getNodeAttributes = str_attEnd Function
Dave Don't forget to rate messages!
Find Me On: Web|Facebook|Twitter|LinkedIn
Waving? dave.m.auld[at]googlewave.com -
It looks like you are missing quotes from the output string. As you already know, you have to increase the number of quotes if you want to add quotes to the output, you are only doing this in some of your code.
priyaahh wrote:
str_att = "Attribute=" & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1"" Attribute2="""
Look at the code after "Attribute=" the opening value only has a single double quote, which will result in Attribute=1,1,....etc. and not Attribute="1,1,...etc. yet at the end you correctly add the extra quotes. you can always consider user Char(34) in you string generator so you can see where you want to add the quote to the output e.g. (34 is the ASCII value for a double quote, look at asciitable[^])
str_Att = "Attribute1=" & chr(34) & "1,1,0,1,16711680,2,0,0,1,16711680,0,0,0,0,0,0.5,10,Arial,1" & chr(34) & " Attribute2=" & chr(34) & "some value" & chr(34)
Dave Don't forget to rate messages!
Find Me On: Web|Facebook|Twitter|LinkedIn
Waving? dave.m.auld[at]googlewave.com