Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <root>
- <header name ='a'>
- <item name='11' />
- <item name='22' />
- </header>
- <header name ='b'>
- <item name='33' />
- <item name='44' />
- <item name='55' />
- </header>
- </root>
- // create the XmlDocument and add <root> node
- XmlDocument doc = new XmlDocument();
- doc.AppendChild(doc.CreateElement("root"));
- // dictionary to keep track of <header> nodes
- Dictionary<string, XmlNode> nodesPerColumnA = new Dictionary<string, XmlNode>();
- // Loop through data rows
- foreach (DataRow row in tbl.Rows)
- {
- // extract values for ColumnA and ColumnB as strings
- string columnAValue = row["ColumnA"].ToString();
- string columnBValue = row["ColumnB"].ToString();
- // create a new <item> XmlNode and fill its attribute @Name
- XmlElement newNode = doc.CreateElement("item");
- XmlAttribute newNodeAttribute = doc.CreateAttribute("name");
- newNodeAttribute.InnerText = columnBValue;
- newNode.Attributes.Append(newNodeAttribute);
- // check if we already have a <header> node for that "ColumnA" value
- if(nodesPerColumnA.ContainsKey(columnAValue))
- {
- // if so - just add <item> below that <header>
- XmlNode parent = nodesPerColumnA[columnAValue];
- parent.AppendChild(newNode);
- }
- else
- {
- // if not - create appropriate <header> node and its @name attribute
- XmlElement header = doc.CreateElement("header");
- XmlAttribute headerAttr = doc.CreateAttribute("name");
- headerAttr.InnerText = columnAValue;
- header.Attributes.Append(headerAttr);
- header.AppendChild(newNode);
- doc.DocumentElement.AppendChild(header);
- // store that <header> xmlnode into the dictionary for future use
- nodesPerColumnA.Add(columnAValue, header);
- }
- }
- // check the contents of the XmlDocument at the end
- string xmlContents = doc.InnerXml;
- SELECT
- ColumnA AS '@name',
- (SELECT ColumnB AS '@name'
- FROM YourTable t
- WHERE t.ColumnA = YourTable.ColumnA
- FOR XML PATH('item'), TYPE)
- FROM
- YourTable
- GROUP BY
- ColumnA
- FOR XML PATH('header'), ROOT('root')
- <root>
- <header name="a">
- <item name="11" />
- <item name="22" />
- </header>
- <header name="b">
- <item name="33" />
- <item name="44" />
- <item name="55" />
- </header>
- </root>
- var qry = from row in Table
- group row by row.ColumnA into header
- select header;
- var elem = new XElement("root");
- foreach (var header in qry)
- {
- var elemHead = new XElement("header", new XAttribute("name", header.Key));
- elem.Add(elemHead);
- foreach (var item in header)
- elemHead.Add(new XElement("item", new XAttribute("name", item.ColumnB)));
- }
- // the variable elem contains the result.
- XDocument yourDocument = new XDocument(new XElement("root",
- new XElement("header",
- new XAttribute("name", "a"),
- new XElement("item",
- new XAttribute("name", "11")),
- new XElement("item",
- new XAttribute("name", "22"))),
- new XElement("header",
- new XAttribute("name", "b"),
- new XElement("item",
- new XAttribute("name", "33")),
- new XElement("item",
- new XAttribute("name", "44")),
- new XElement("item",
- new XAttribute("name", "55")))));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement