- Exclude certain nodes
- No redundant tags
example:
a {parent} /a
ul
li
a {child} /a
/li
/ul
// include the node in sitemap bool isinclude(node):
Skip node and its subtree too.
sitemap(n):
buffer = new
if !isinclude(n):
return buffer
buffer.append("a" + node.value + "/a")
childrenbuffer = new
foreach child in n.children:
childbuffer = sitemap(child)
if childbuffer.length > 0:
childrenbuffer.append("li" + childbuffer + "/li")
if childrenbuffer.length > 0:
buffer.append("ul" + childrenbuffer + "/ul")
return buffer
// wrap in div
sitemap-main(n):
return "div" + sitemap(n) + "/div"
Skip node only not its subtree. But redundant nested tags are created.
sitemap(n):
buffer = new
if isinclude(n):
buffer.append("a " + node.value + "/a")
childrenbuffer = new
foreach child in n.children:
childbuffer = sitemap(child)
if childbuffer.length > 0:
childrenbuffer.append("li" + childbuffer + "/li")
if childrenbuffer.length > 0:
buffer.append("ul" + childrenbuffer + "/ul")
return buffer
Skip node only not its subtree. There are still few redundant tags.
// creates redundant tags for this example:
// x
// x
// n
//
// as
//
// ul
// li
// a {n} a
// /li
// /ul
// wrap in ul if needed
sitemap-main(n):
tuple = sitemap(n)
buffer = new
if tuple.isinclude:
// tuple.buffer is a, lis
buffer.append(tuple.buffer)
else:
// tuple.buffer is lis
buffer.append("ul" + tuple.buffer + "/ul")
return buffer
sitemap(n):
buffer = new
if isinclude(n):
buffer.append("a" + node.value + "/a")
childrenbuffer = new
foreach child in n.children:
tuple = sitemap(child)
childbuffer = tuple.buffer
isinclude = tuple.isinclude
if childbuffer.length > 0:
if isinclude:
// childbuffer is a, lis
childrenbuffer.append("li" + childbuffer + "/li")
else:
// childbuffer is lis
childrenbuffer.append(childbuffer)
if childrenbuffer.length > 0:
if isinclude(n):
buffer.append("ul" + childrenbuffer + "/ul")
else:
buffer.append(childrenbuffer)
return tuple(buffer, isinclude(n))
Skip node only not its subtree. No redundant tags.
// works for this example:
// x
// x
// n
//
// as
//
// a {n} /a
// wrap in ul if needed
sitemap-main(n):
//same
sitemap(n):
buffer = new
if isinclude(n):
buffer.append("a" + node.value + "/a")
childcount = 0
childrenbuffer = new
foreach child in n.children:
tuple = sitemap(child)
childbuffer = tuple.buffer
isinclude = tuple.isinclude
if childbuffer.length > 0:
// capture child
childcount++
singlechild = tuple
if isinclude:
// childbuffer is a, lis
childrenbuffer.append("li" + childbuffer + "/li")
else:
// childbuffer is lis
childrenbuffer.append(childbuffer)
// if node is not included and only one child, bubble up child
if !isinclude(n) && childcount == 1:
return singlechild
if childrenbuffer.length > 0:
if isinclude(n):
buffer.append("ul" + childrenbuffer + "/ul")
else:
buffer.append(childrenbuffer)
return tuple(buffer, isinclude(n))
No comments:
Post a Comment