2017-12-15 30 views
1

私はlxmlを使ってPythonでxmlファイルを解析しています。 xmlには自分のコードを設定する目的があります。わずかに異なる多くの異なる設定を使用する必要があるので、私はxi:include機能を使用しています。lxmlとpython:グローバルエンティティの設定方法

"main" xmlファイルにいくつかのエンティティを宣言し、含まれているものにそれらについて知ってもらうことができれば、本当に便利です。ここ は私の作業例です:

main.xml

<?xml version="1.0"?> 
<!DOCTYPE doc> 
<configuration xmlns:xi="http://www.w3.org/2001/XInclude" name="foo" version="0.1" > 
<xi:include href="./external.xml" /> 
</configuration> 

external.xml

<?xml version="1.0"?> 
<!DOCTYPE doc [ 
     <!ENTITY bar "example"> 
     ]> 
<objects> 
    <object name="&bar;" /> 
</objects> 

私がやりたいことは、main.xml内のバーを宣言することです、これは可能ですか?事前に おかげで、 マッテオ

+0

良い解決策はありません。 external.xmlからエンティティ宣言を削除すると、インクルードは失敗します。インクルードされたドキュメントはインクルードされる前に解析され、未解決のエンティティリファレンスはエラーを生成します。 – mzjn

+0

こんにちは@mzjn、ご意見ありがとうございます。私は回避策を見つけました。私は新しいxmlのすべての異なる構成を収集し、xpointerの機能によって選択するいくつかの架空のノードです。これが一般的な関心事である可能性がある場合は、ここに例を置くことができます –

+0

問題を解決するソリューションがあれば、回答として投稿する必要があります。 – mzjn

答えて

0

は、これは私が探していた正確に解決策はありませんが、ちょっと私の問題を解決しました:

main.xml

<?xml version="1.0"?> 
<!DOCTYPE doc> 
<configurations> 
    <configuration> 
    <xi:include href="./external/confs.xml" xpointer="xpointer(/ext/conf1)" /> 
    </configuration> 

    <configuration> 
    <xi:include href="./external/confs.xml" xpointer="xpointer(/ext/conf2)" /> 
    </configuration> 
</configurations> 

confs.xml

<?xml version="1.0"?> 
<!DOCTYPE doc[ 
    <!ENTITY foo "bar"> 
]> 
    <ext> 
     <conf1> 
      <inc name="apple_&foo;" /> 
     </conf1> 

     <conf2> 
      <inc name="orange_&foo;" /> 
     </conf2> 

    </ext> 
関連する問題