用Python查找和链接XML中重复字符串的最简单方法

2024-09-24 02:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须解析一个包含大量字符串值的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初学者,不是计算机科学家,计算复杂性不是问题。解析和编写XMLs不是一个问题(我用lxml解决了这个问题),所以这里的问题只是关于循环字符串及其链接的检测。你知道吗


Tags: 文件实例方法字符串示例foovalue链接
1条回答
网友
1楼 · 发布于 2024-09-24 02:25:37

一种方法是维护您以前看到的所有字符串的dict(从任意键到值的映射)。因此,假设您在变量val中有值,并且有一个dict 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)

我并不推荐使用这种简单的方法来构建xmlseiself,但听起来您已经准备好处理这方面的事情了。你知道吗

相关问题 更多 >