Sir, I have created an xml file from excel data using VB.net (Datagridview) and getting the XML output but it was not in an desired order. please help me to get the XML output in specific order. Demo Image has been enclosed. My VB.Net Code
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim doc As New XmlDocument, xslDoc As New XmlDocument, newDoc As New XmlDocument
Dim root As XmlElement
Dim dataNode As XmlElement
Dim subdataNode As XmlElement
Dim attribNode As XmlElement
' DECLARE XML DOC OBJECT '
root = doc.CreateElement("SMCH")
doc.AppendChild(root)
Dim rowIndex As Int32 = 0
Dim colIndex As Int32 = 0
' WRITE TO XML '
' In case you want the first column selected.
' DATA NODE '
For rowIndex = 0 To DataGridView1.RowCount - 1
If DataGridView1.Rows(rowIndex).Cells("ID").Value IsNot Nothing Then
dataNode = doc.CreateElement("Data")
root.AppendChild(dataNode)
' OUTER ATTRIBUTE NODE '
attribNode = doc.CreateElement("ID")
dataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("ID").Value.ToString
' SUB DATA NODE '
subdataNode = doc.CreateElement("EMPLOYEE")
dataNode.AppendChild(subdataNode)
' ATTRIBUTE NODE '
attribNode = doc.CreateElement("EMPLOYEENAME")
subdataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("NAME").Value.ToString
' ATTRIBUTE NODE '
attribNode = doc.CreateElement("GRADEMONTH")
subdataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("MONTH").Value.ToString
' ATTRIBUTE NODE '
attribNode = doc.CreateElement("GRADE")
subdataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("GRADE").Value.ToString
Else
' SUB DATA NODE '
subdataNode = doc.CreateElement("EMPLOYEE")
dataNode.AppendChild(subdataNode)
' ATTRIBUTE NODE '
attribNode = doc.CreateElement("EMPLOYEENAME")
subdataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("NAME").Value.ToString
' ATTRIBUTE NODE '
attribNode = doc.CreateElement("GRADEMONTH")
subdataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("MONTH").Value.ToString
' ATTRIBUTE NODE '
attribNode = doc.CreateElement("GRADE")
subdataNode.AppendChild(attribNode)
attribNode.InnerText = DataGridView1.Rows(rowIndex).Cells("GRADE").Value.ToString
End If
Next rowIndex
' PRETTY PRINT RAW OUTPUT '
xslDoc.LoadXml("<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>" _
& "<xsl:stylesheet version=" & Chr(34) & "1.0" & Chr(34) _
& " xmlns:xsl=" & Chr(34) & "http://www.w3.org/1999/XSL/Transform" & Chr(34) & ">" _
& "<xsl:strip-space elements=" & Chr(34) & "*" & Chr(34) & " />" _
& "<xsl:output method=" & Chr(34) & "xml" & Chr(34) & " indent=" & Chr(34) & "yes" & Chr(34) & " omit-xml-declaration=" & Chr(34) & "yes" & Chr(34) & "/>" _
& " <xsl:template match=" & Chr(34) & "node() | @*" & Chr(34) & ">" _
& " <xsl:copy>" _
& " <xsl:apply-templates select=" & Chr(34) & "node() | @*" & Chr(34) & " />" _
& " </xsl:copy>" _
& " </xsl:template>" _
& "</xsl:stylesheet>")
doc.Save("C:\Users\Admin\Desktop\TXML.xml")
End Sub
Employees with same ID has to Close with single Data Node but my output create data node for each row in an excel data. Please help me, Thanks in advance.