0

我必须解析一个包含大量字符串值的 XML 文件。例如:

<value>Foo</value>
<value>Bar</value>
<value>Baz</value>
<value>Foo</value>

其中一些是平等的。有多个重复出现的字符串,而不仅仅是上面示例中的一个。因此,我想检测这些值,并将它们与 XLink 链接:在重复字符串的一个实例中创建引用(不必在第一个),并链接其余的(我可以使用UUID),就像这里:

<value id="D5494447-A010-4F81-9DDA-E5DFFBD616FF">Foo</value>
<value>Bar</value>
<value>Baz</value>
<value href="#D5494447-A010-4F81-9DDA-E5DFFBD616FF"/>

我从 XLinks 开始,所以上面的内容可能没有意义。如果这是不可能的,另一种可能性是我可以创建一个包含这些值的字典:

{'D5494447-A010-4F81-9DDA-E5DFFBD616FF' : 'Foo'}

然后以某种方式将它们放入 XML 中。实现这些的最简单方法是什么?只要方法正确且易于实现,我不太关心最有效的方法,因为我是 Python 初学者而不是计算机科学家,计算复杂度不是问题。解析和编写 XML 不是问题(我用 lxml 解决了这个问题),所以这里的问题只是关于重复字符串的检测及其链接。

4

1 回答 1

1

一种方法是维护您之前见过的所有字符串的 dict(从任意键到值的映射)。因此,让我们假设您处于变量中具有值的位置val,并且有一个valdict最初为空的 dict。您需要的代码是这样的:

import uuid
if val in valdict: # We have seen this reference before
    print '<value href="#%s"/>' % valdict[val]
else:              # We need to add this reference
    valdict[val] = str(uuid.uuid4()).upper()
    print '<value id="%s">%s</value>' % (valdict[val], val)

我不会真的推荐这种简单的方法来形成 XML 本身,但听起来您已经准备好处理这方面的事情了。

于 2014-02-22T19:00:24.257 回答