<BBB>
<CCC name="abc">
</CCC>
</BBB>
<DDD>
<CCC name="abc">
</CCC>
</DDD>
<EEE>
<CCC name="efg">
</CCC>
</EEE>
</AAA>
比如这样一个xml,我想获取同一个属性出现两次以上的节点,就是我想获取CCC/@name="abc"这个节点,各位大侠要如何写啊
6 个解决方案
#1
上面的xml有点问题我没有形容清楚,我这边修改了一下
<AAA>
<BBB>
<B1>
<DETAIL name="abc"></DETAIL>
<B1>
<B2>
<DETAIL name="abc"></DETAIL>
<B2>
<B3>
<DETAIL name="efg"></DETAIL>
<B3>
</BBB>
<CCC>
<C1>
<DETAIL name="abc"></DETAIL>
<C1>
<C2>
<DETAIL name="efg"></DETAIL>
<C2>
</CCC>
<DDD>
<D1>
<DETAIL name="hij"></DETAIL>
<D1>
<D2>
<DETAIL name="efg"></DETAIL>
<D2>
</DDD>
</AAA>
需求是这样的,我想获取同一个属性出现两次以上的节点,但是这个重复的跨度只能是BBB,CCC,DDD节点范围内的,不能是BBB跨到CCC下面去找重复,所以只获取<DETAIL name="abc"></DETAIL>这个节点,而<DETAIL name="efg"></DETAIL>不算重复节点。这个xpath要如何写啊,跪求!!!!!
<AAA>
<BBB>
<B1>
<DETAIL name="abc"></DETAIL>
<B1>
<B2>
<DETAIL name="abc"></DETAIL>
<B2>
<B3>
<DETAIL name="efg"></DETAIL>
<B3>
</BBB>
<CCC>
<C1>
<DETAIL name="abc"></DETAIL>
<C1>
<C2>
<DETAIL name="efg"></DETAIL>
<C2>
</CCC>
<DDD>
<D1>
<DETAIL name="hij"></DETAIL>
<D1>
<D2>
<DETAIL name="efg"></DETAIL>
<D2>
</DDD>
</AAA>
需求是这样的,我想获取同一个属性出现两次以上的节点,但是这个重复的跨度只能是BBB,CCC,DDD节点范围内的,不能是BBB跨到CCC下面去找重复,所以只获取<DETAIL name="abc"></DETAIL>这个节点,而<DETAIL name="efg"></DETAIL>不算重复节点。这个xpath要如何写啊,跪求!!!!!
#2
#3
还是没看懂问题~~~
#4
xpath只是实现简单的查询,并不能帮你做到统计功能。
所以,你说检查重复,这个“abc”是个固定值呢,还是个未知值。
如果是一个未知值,那就不能依靠xpath实现你的需求。
其实这只要一个简单的算法就能实现了,你可以这样做:
1,通过xpath取出所有节点,语句是://DETAIL
2,遍历DETAIL,并用一个hash table来保存不同的DETAIL。
这个hash table怎么存呢,你可以用DETAIL的父2级节点名+name属性值作为key,然后将重复的数值作为value存入。
例:BBB_abc作为key,值是1。在遍历到第二个BBB下的abc时,值为2,以此类推。
3,hash table中,所有值大于1的就是你要的东西。
所以,你说检查重复,这个“abc”是个固定值呢,还是个未知值。
如果是一个未知值,那就不能依靠xpath实现你的需求。
其实这只要一个简单的算法就能实现了,你可以这样做:
1,通过xpath取出所有节点,语句是://DETAIL
2,遍历DETAIL,并用一个hash table来保存不同的DETAIL。
这个hash table怎么存呢,你可以用DETAIL的父2级节点名+name属性值作为key,然后将重复的数值作为value存入。
例:BBB_abc作为key,值是1。在遍历到第二个BBB下的abc时,值为2,以此类推。
3,hash table中,所有值大于1的就是你要的东西。
#5
http://*.com/questions/4781959/grouping-by-an-attribute-in-xslt
#6
/AAA//DETAIL[@name=abc]
#1
上面的xml有点问题我没有形容清楚,我这边修改了一下
<AAA>
<BBB>
<B1>
<DETAIL name="abc"></DETAIL>
<B1>
<B2>
<DETAIL name="abc"></DETAIL>
<B2>
<B3>
<DETAIL name="efg"></DETAIL>
<B3>
</BBB>
<CCC>
<C1>
<DETAIL name="abc"></DETAIL>
<C1>
<C2>
<DETAIL name="efg"></DETAIL>
<C2>
</CCC>
<DDD>
<D1>
<DETAIL name="hij"></DETAIL>
<D1>
<D2>
<DETAIL name="efg"></DETAIL>
<D2>
</DDD>
</AAA>
需求是这样的,我想获取同一个属性出现两次以上的节点,但是这个重复的跨度只能是BBB,CCC,DDD节点范围内的,不能是BBB跨到CCC下面去找重复,所以只获取<DETAIL name="abc"></DETAIL>这个节点,而<DETAIL name="efg"></DETAIL>不算重复节点。这个xpath要如何写啊,跪求!!!!!
<AAA>
<BBB>
<B1>
<DETAIL name="abc"></DETAIL>
<B1>
<B2>
<DETAIL name="abc"></DETAIL>
<B2>
<B3>
<DETAIL name="efg"></DETAIL>
<B3>
</BBB>
<CCC>
<C1>
<DETAIL name="abc"></DETAIL>
<C1>
<C2>
<DETAIL name="efg"></DETAIL>
<C2>
</CCC>
<DDD>
<D1>
<DETAIL name="hij"></DETAIL>
<D1>
<D2>
<DETAIL name="efg"></DETAIL>
<D2>
</DDD>
</AAA>
需求是这样的,我想获取同一个属性出现两次以上的节点,但是这个重复的跨度只能是BBB,CCC,DDD节点范围内的,不能是BBB跨到CCC下面去找重复,所以只获取<DETAIL name="abc"></DETAIL>这个节点,而<DETAIL name="efg"></DETAIL>不算重复节点。这个xpath要如何写啊,跪求!!!!!
#2
#3
还是没看懂问题~~~
#4
xpath只是实现简单的查询,并不能帮你做到统计功能。
所以,你说检查重复,这个“abc”是个固定值呢,还是个未知值。
如果是一个未知值,那就不能依靠xpath实现你的需求。
其实这只要一个简单的算法就能实现了,你可以这样做:
1,通过xpath取出所有节点,语句是://DETAIL
2,遍历DETAIL,并用一个hash table来保存不同的DETAIL。
这个hash table怎么存呢,你可以用DETAIL的父2级节点名+name属性值作为key,然后将重复的数值作为value存入。
例:BBB_abc作为key,值是1。在遍历到第二个BBB下的abc时,值为2,以此类推。
3,hash table中,所有值大于1的就是你要的东西。
所以,你说检查重复,这个“abc”是个固定值呢,还是个未知值。
如果是一个未知值,那就不能依靠xpath实现你的需求。
其实这只要一个简单的算法就能实现了,你可以这样做:
1,通过xpath取出所有节点,语句是://DETAIL
2,遍历DETAIL,并用一个hash table来保存不同的DETAIL。
这个hash table怎么存呢,你可以用DETAIL的父2级节点名+name属性值作为key,然后将重复的数值作为value存入。
例:BBB_abc作为key,值是1。在遍历到第二个BBB下的abc时,值为2,以此类推。
3,hash table中,所有值大于1的就是你要的东西。
#5
http://*.com/questions/4781959/grouping-by-an-attribute-in-xslt
#6
/AAA//DETAIL[@name=abc]