首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在文本(XML)文件中查找重复部分的工具?

在文本(XML)文件中查找重复部分的工具?
EN

Stack Overflow用户
提问于 2008-10-29 20:08:03
回答 5查看 12.9K关注 0票数 0

我有一个XML文件,我想查找具有重复CDATA的节点。有没有什么工具可以帮助我做到这一点?

我可以使用一个一般用于文本文档的工具来实现这一点。

EN

回答 5

Stack Overflow用户

发布于 2009-01-23 16:33:25

这是第一次尝试,用Python编写,只使用标准库。你可以在很多方面改进它(修剪前导空格和结束空格,计算文本的散列以减少内存需求,更好地显示元素,以及它们的行号,等等):

代码语言:javascript
运行
复制
import xml.etree.ElementTree as ElementTree
import sys

def print_elem(element):
    return "<%s>" % element.tag

if len(sys.argv) != 2:
    print >> sys.stderr, "Usage: %s filename" % sys.argv[0]
    sys.exit(1)
filename = sys.argv[1]    
tree = ElementTree.parse(filename)
root = tree.getroot()
chunks = {}
iter = root.findall('.//*')
for element in iter:
    if element.text in chunks:
        chunks[element.text].append(element)
    else:
        chunks[element.text] = [element,]
for text in chunks:
    if len(chunks[text]) > 1:
        print "\"%s\" is a duplicate: found in %s" % \
              (text, map(print_elem, chunks[text]))

如果你给它这个XML文件:

代码语言:javascript
运行
复制
<foo>
<bar>Hop</bar><quiz>Gaw</quiz>
<sub>
<und>Hop</und>
</sub>

它将输出:

代码语言:javascript
运行
复制
"Hop" is a duplicate: found in ['<bar>', '<und>']
票数 2
EN

Stack Overflow用户

发布于 2008-10-29 21:18:44

我从来没有听说过这样的事情,但是基于dictionary coder编写这样的程序可能是一项有趣的任务,就像在archivers中使用的一样。

票数 0
EN

Stack Overflow用户

发布于 2009-01-23 15:50:56

这可不容易。我首先想到的是XSLT,但它很难实现。您必须遍历每个节点,然后对具有相同数据的每个节点执行XPATH select。这将找到它们,但您最终也会处理所有具有相同数据的节点(即,无法跟踪您已经处理过的节点数据并忽略它)。你可以用真正的编程语言来做,但那不是我的经验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/248227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档