2

複数のファイルに保存されているXMLを含めるためにXLinkを自由に使用するXML構成ファイルを読み取るスクリプトを作成するように依頼されました。例えば:

<Environment xlink:href="#{common.environment}" />

(#{common.environment}は、最初に解決されるプロパティプレースホルダーであり、ここでは無視できます。)同社は、Pythonでの高度なXML処理のためにlxmlを標準化しています。

私は、これらの制約の下でこれらの発生を処理する方法の例またはドキュメントを探していました。少なくとも、その時点で実際に挿入されたかのように、それらのコンテンツを親XMLドキュメントに含めます。何か明らかなものが欠けているのではないかと思うほど、貴重なものを見つけて少し驚いています。XLinkとは何かに関する一般的なドキュメントを見つけ、XSLT処理のコンテキストで使用されている例をいくつか見つけました。しかし、それは私には役に立ちませんでした。

ドキュメント、例、または経験からのアドバイスなど、これを最適に実装する方法について誰かがアドバイスを提供できますか?ありがとう。

更新:これが前後の例です:

前。これは、解析されるファイルに実際に含まれているものです。

<Root>
    <Environment xlink:href="#{common.environment}" />
</Root>

これは、#{common.environment}が解決するファイルの内容です。

<?xml version="1.0" encoding="UTF-8"?>
<Environment>
    <Property key="hello.world" value="foo" />
    <Property key="bar.baz" value="fred" />
</Environment>

後。これは、すべての処理が完了した後、パーサーがそれを「認識する」方法です。

<Root>
    <Environment>
        <Property key="hello.world" value="foo" />
        <Property key="bar.baz" value="fred" />
    </Environment>
</Root>

これは、そこで起こっていることの根本的に単純化された例です。

4

1 に答える 1

2

この答えは、あなたが本当に必要としているものとはかけ離れている可能性がありますが、おそらくそれはいくつかの助けになる可能性があります。以下の小さなプログラムは、「根本的に単純化された」例に基づいて私が思いつくことができるものです。

from lxml import etree

parent = etree.parse("parent.xml").getroot()
penv = parent.xpath("Environment")

for e in penv:
    child = e.get("{http://www.w3.org/1999/xlink}href")
    c = etree.parse(child).getroot()
    parent.replace(e, c)

print etree.tostring(parent)

parent.xml:

<Root xmlns:xlink="http://www.w3.org/1999/xlink">
  <Environment xlink:href="child.xml"/>
</Root>

child.xml:

<Environment>
  <Property key="hello.world" value="foo" />
  <Property key="bar.baz" value="fred" />
</Environment>

プログラムを実行すると、次のように出力されます。

<Root xmlns:xlink="http://www.w3.org/1999/xlink">
  <Environment>
  <Property key="hello.world" value="foo"/>
  <Property key="bar.baz" value="fred"/>
</Environment></Root>
于 2012-06-20T15:47:18.627 に答える