我必须解析一个包含大量字符串值的XML文件。例如:
<value>Foo</value>
<value>Bar</value>
<value>Baz</value>
<value>Foo</value>
其中一些是平等的。有多个重复的字符串,而不仅仅是上面示例中的一个。因此,我想检测这些值,并将它们与XLink链接:在一个重复字符串的一个实例上创建一个引用(不必在第一个),并链接其余的(我可以使用) UUIDs),就像这里:
<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来解决),所以这里的问题只是检测重复的字符串及其链接。
答案 0 :(得分:1)
一种方法是维护您之前看到的所有字符串的dict(从任意键到值的映射)。所以,让我们假设您处于变量val
中的值,并且有一个最初为空的字典valdict
。您需要的代码是这样的:
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 iself,但听起来你已经做好了充分准备来处理这方面的事情。