0

多数の文字列値を含む XML ファイルを解析する必要があります。例えば:

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

それらのいくつかは等しいです。上記の例のように 1 つだけではなく、複数の繰り返し文字列があります。したがって、そのような値を検出し、それらを XLink にリンクしたいと思います: 繰り返し文字列のインスタンスの 1 つで参照を作成し (最初のインスタンスである必要はありません)、残りをリンクします (使用できます)。 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

1 つの方法は、以前に見たすべての文字列の dict (任意のキーから値へのマッピング) を維持することです。それで、 variable に値がある時点にいて、最初は空のvaldict があると仮定しましょう。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 自体を形成するためのこの単純な方法はあまりお勧めしませんが、その側面を処理する準備はすでに整っているように思えます。

于 2014-02-22T19:00:24.257 に答える