|
反转XML文件中的父子关系广告 反转XML文件中的父子关系
首先给出命题。用XML构造家庭树很能说明问题:实际上无法描述整个家庭树。因为一个XML文件只有一个根节点或一个祖先,而一个家庭则有(父母)二个祖先。 也许可以定义一个虚的根节点,让它包含父母二个祖先节点,比如: <TheSmiths> <JohnSmith> <BettySmith> </TheSmiths> 按照这个方法,可以往下定义Smith的儿子、孙子、重孙子等等。但是换一个角度考虑,就会出现新的问题。 这是一种着眼于纯XML数据结构的方法,所以定义了一个虚的根节点。如果从实际需求出发,考虑家庭的根与树的衍生就会有问题。可以发现只能从一个祖先节点衍生出家庭的子孙节点,现在多了一个祖先节点,要么让它成为瘸腿树(例如母亲节点以下为空),要么从父母二个节点都衍生出完全相同的子树。总之,都有问题。 新思路 解决上面这个问题的方法是改变XML构造层次的思路。不要想当然地将家庭的祖先作为XML的根,而是用家庭的子孙作为XML的根。 下面用一个示例来说明层次关系反转的思路和用法。 LISTING 1 构造的是虚拟人物John Smith的祖先。 LISTING 1: johnsmith.xml <?xml version="1.0" ?> <JohnSmith> <JeffersonSmith> <WilliamSmith> <RichardSmith> </RichardSmith> <AdelaideBrooksSmith> </AdelaideBrooksSmith> </WilliamSmith> <RebeccaCorruthersSmith> <GeorgeCorruthers> </GeorgeCorruthers> <SvetlanaMironovCorruthers> </SvetlanaMironovCorruthers> </RebeccaCorruthersSmith> </JeffersonSmith> <DeloresJonesSmith> <ArchibaldJones> <BenjaminJones> <ArthurJones> </ArthurJones> <PauletteBoudinJones> </PauletteBoudinJones> </BenjaminJones> <ElizabethBennettJones> <GeoffreyBennett> </GeoffreyBennett> <BeatriceBennettBaughman> </BeatriceBennettBaughman> </ElizabethBennettJones> </ArchibaldJones> <WilmaStockhausenJones> <GuntherStockhausen> </GuntherStockhausen> <UlmaWeinerbraugStockhausen> </UlmaWeinerbraugStockhausen> </WilmaStockhausenJones> </DeloresJonesSmith> </JohnSmith> 新的关系轴,新的思维角度 上面例子的根节点是JohnSmith元素,所有的子节点都是他的祖先。按照XML层次关系,其它节点又都是根节点的“子”节点。每个节点都含有二个子节点表示该节点的父母。是不是感到很乱?下面是个基本的树结构,能清楚地说明这个新思路: <person> <mom/> <dad/> </person> 每个人(person)的子节点实际上是这个人的父亲(dad)和母亲(mom)。每个父亲节点(dad)或母亲节点(mom)的父节点则是该节点的儿女(person)。 由于反转了XML文件中的父子关系,可以更加清楚地观察到John Smith的祖先。 结论 我们所做的事是从根本上改变解决问题的思路。这个方法也有缺点,比如不能显示祖先的兄弟姐妹。但是它能够直接从子节点上追溯祖先。可以按照这个方法继续增加祖先节点,而不必改变可用于第一个示例的XPath描述。 如果您希望与本文章的作者或其所在机构,进一步交流,请联系:姜小姐 jill.jiang@amt.com.cn | 021-51096826-112 | 在线联系 |
CIO职场,强者生存?在2008年,我们将继续看到CIO向商业运营方向发展。与此同时,我们也会看到商业管理人员将与技术管理人员一起竞争CIO岗位。 IT领导者的就职机会虽有不少,但其难度将会大幅提高。2…… 防震减灾,IT当关今天,任何的防震救灾体系,都离不开IT技术。地震观测台是数字化的,震害防御需要对以往的地震信息进行数据分析,应急救援要需要现代多样化的通讯技术。如果说,在许多行业,信息技术还只是一…… |
|
|