【问题标题】:Simplest way to find and link repeating strings in an XML with Python使用 Python 在 XML 中查找和链接重复字符串的最简单方法
【发布时间】:2014-03-24 08:47:20
【问题描述】:

我必须解析一个包含大量字符串值的 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 解决了),所以这里的问题只是关于重复字符串的检测及其链接。

【问题讨论】:

    标签: python xml search indexing xlink


    【解决方案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 本身,但听起来你已经准备好处理这方面的事情了。

    【讨论】:

    • 谢谢。它看起来比我预期的要简单。我会想办法用lxml生成上面的,所以应该没问题。
    猜你喜欢
    • 2021-08-08
    • 2016-10-05
    • 2010-11-17
    • 2012-04-16
    • 2011-08-23
    • 2019-03-24
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多