2

lxml を使用して、やりたいことのほとんどを達成できましたが、難読化の例とチュートリアルを実行するのは大変でした。つまり、外部の xml ファイルを読み取り、lxml を介して適切なツリーのような形式にインポートすることができます。

これを示すために、次のように入力するとします。

print(etree.tostring(myXmlTree, pretty_print= True, method= "xml") )

次の出力が得られます。

<net xmlns="http://www.arin.net/whoisrws/core/v1" xmlns:ns2="http://www.arin.net/whoisrws/rdns/v1" xmlns:ns3="http://www.arin.net/whoisrws/netref/v2" termsOfUse="https://www.arin.net/whois_tou.html">
 <registrationDate>2006-08-29T00:00:00-04:00</registrationDate>
 <ref>http://whois.arin.net/rest/net/NET-79-0-0-0-1</ref>
 <endAddress>79.255.255.255</endAddress>
 <handle>NET-79-0-0-0-1</handle>
 <name>79-RIPE</name>
 <netBlocks>
  <netBlock>
   <cidrLength>8</cidrLength>
   <endAddress>79.255.255.255</endAddress>
   <description>Allocated to RIPE NCC</description>
   <type>RN</type>
   <startAddress>79.0.0.0</startAddress>
  </netBlock>
 </netBlocks>
 <orgRef name="RIPE Network Coordination Centre" handle="RIPE">http://whois.arin.net/rest/org/RIPE</orgRef>
 <comment>
  <line number="0">These addresses have been further assigned to users in</line>
  <line number="1">the RIPE NCC region. Contact information can be found in</line>
  <line number="2">the RIPE database at http://www.ripe.net/whois</line>
 </comment>
 <startAddress>79.0.0.0</startAddress>
 <updateDate>2009-05-18T07:34:02-04:00</updateDate>
 <version>4</version>
</net>

OK、それは人間が消費するのには最適ですが、機械には役に立ちません。xml の開始 IP アドレスと終了 IP アドレスなど、特定の要素が必要な場合は、次のように入力できます。

ns = myXmlTree.nsmap.values()[0]
myXmlTree.findall("{" + ns + "}startAddress")[0].text
myXmlTree.findall("{" + ns + "}endAddress")[0].text

そして私は受け取るでしょう:

'79.0.0.0'
'79.255.255.255'

しかし、そこにある要素を知るには、人間として xml ファイルを調べる必要があります。代わりに、特定のレベルですべての要素の名前を取得し、そのレベルを自動的にトラバースできるようにしたいと考えています。したがって、たとえば、次のようなことをしたいと思います。

myElements = myXmlTree.findallelements("{" + ns + "}")

そして、それは私に次のような戻り値を与えるでしょう:

['registrationDate', 'ref', 'endAddress', 'handle', 'name', 'netBlocks', 'orgRef', 'comment', 'startAddress', 'updateDate', 'version']

ネストされた要素を含め、要素の構造全体を教えてくれたら特に素晴らしいです。

そうしないと意味がないので、方法があると確信しています。

前もって感謝します!!

PS、私はすべての反復のリストを反復して調べることができることを知っています。これらのデータを持つ lxml 内のメソッドが既に存在することを望んでいました。反復が唯一の方法である場合は、それで問題ないと思います...私には不格好に思えます。

4

1 に答える 1