0

大きなXMLファイル(DTDで定義されたエンティティを含む)をステップスルーする簡単なコードがあります。

from lxml import etree
tree = etree.parse(
    file('t.xml', 'r'), etree.XMLParser(dtd_validation=False, load_dtd=True))
for e in tree.iter('bla'):
    process(e)  # whatever to be done with it

これは、プレーンXML入力に適しています。

残念ながら、iterジェネレーターは、コロンが内部にあるタグ(名前空間プレフィックス)に対しては何も生成しません。名前空間はどこにも定義されておらず、実際私はそれを気にしません。要素を繰り返し処理したいだけです。

これを行う簡単な方法はありますか?

4

1 に答える 1

1

まあ、これは完全に満足のいくものではないかもしれませんが、これが私が見つけたものです:

>>> root = tree.getroot()
>>> root.attrib
{'{http://www.w3.org/2001/XMLSchema-instance}schemaLocation': 'http://xmlns.oracle.com/weblogic/security/xacml'}
>>> root.nsmap
{None: 'http://xmlns.oracle.com/weblogic/domain', 'wls': 'http://xmlns.oracle.com/weblogic/security/wls', 'sec': 'http://xmlns.oracle.com/weblogic/security', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance'}
>>> 

次のようなタグの場合:

<domain xmlns="http://xmlns.oracle.com/weblogic/domain"
    xmlns:sec="http://xmlns.oracle.com/weblogic/security"
    xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.oracle.com/weblogic/security/xacml">

しかし、これはあなたがすべてを手に入れることを可能にするはずです:

  • 経由の「標準」属性attrib
  • 「名前空間」のものからnsmap
于 2012-08-28T08:29:33.173 に答える