Wednesday, February 9, 2011

SharePoint 2010: code for dumping a taxonomy tree

Just customize the data you need from each node type (store, group, set, term).
        private void DumpTaxonomy(string siteUrl)
{
Stack<string> stack = new Stack<string>();
using (SPSite site = new SPSite(siteUrl))
{
TaxonomySession session = new TaxonomySession(site, false);
int nts = 0;
foreach (TermStore ts in session.TermStores)
{
nts++;
int ng = 0;
foreach (Group g in ts.Groups)
{
ng++;
int ns = 0;
foreach (TermSet s in g.TermSets)
{
ns++;
int nt = 0;
foreach (Term t in s.Terms)
{
nt++;
DumpTerm(t, stack, 4);
}
stack.Push(ReportNode(3, nt));
}
stack.Push(ReportNode(2, ns));
}
stack.Push(ReportNode(1, ng));
}
stack.Push(ReportNode(0, nts));
}
while (stack.Count > 0)
{
Console.WriteLine(stack.Pop());
}
}

private void DumpTerm(Term t, Stack<string> stack, int level)
{
int nt = 0;
foreach (Term children in t.Terms)
{
nt++;
DumpTerm(children, stack, level + 1);
}
stack.Push(ReportNode(level, t.Name + " " + nt.ToString()));
}

private string ReportNode(int level, object children)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < level; i++)
{
sb.Append("\t");
}
sb.Append(children);
return (sb.ToString());
}

No comments: