【发布时间】:2018-04-08 12:12:02
【问题描述】:
我已经简化了一个表示有向无环图的 xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<items>
<item id="1">
</item>
<item id="2">
<parent idref="1" />
</item>
<item id="3">
<parent idref="1" />
</item>
<item id="4">
<parent idref="3" />
</item>
<item id="5">
<parent idref="4" />
</item>
<item id="6">
<parent idref="3" />
</item>
<item id="7">
<parent idref="4" />
</item>
<item id="8">
<parent idref="4" />
</item>
<item id="9">
<parent idref="4" />
</item>
<item id="10">
<parent idref="6" />
</item>
</items>
这种表示允许无限深度(我不知道数学术语)。除了没有父项的根项之外,每个项都有一个且只有一个父项。每个项目可以有 0 到任意数量的子项目。每个项目都由它的 id 标识,它是一个任意标签。
用点表示法可视化图形可能更容易。在我的文件中,更容易看到第 3 项有两个子节点,第 4 项有 4 个:
digraph
{
1 -> {2, 3}
3 -> {4, 6}
4 -> {5, 7, 8, 9}
6 -> 10
}
计算第 3 项的子项数为:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(items/item/parent[@idref='3'])" />
</xsl:template>
</xsl:stylesheet>
xslt 样式表输出 2,这是正确的。如果我把3改成4,那么输出就是4,也是正确的。
问题:我想计算特定项目的所有子项目。
对于第 3 项,正确答案是 7(第 4、6、5、7、8、9、10 项)。对于第 1 项,答案是 9。对于第 7 项,答案是 0。我怀疑答案涉及递归,我已经成功地使用它来构造树的各个部分,但没有传递值或计算总和。
【问题讨论】:
标签: xml xslt directed-acyclic-graphs