3

こんにちは、Python 2.7 で (1.3) を
使用しており、XPath 機能を楽しんでいます が、検索結果の 1 つに驚きました。 ElementTree

私のXMLの例:

<OTF>
  <FECS state="disabled" version="2.2.0.0">
    <BackEndCompatibility major="2.2" state="disabled">
        <BackEnd state="disabled" version="2.2.0.0"/>
    </BackEndCompatibility>
  </FECS>
</OTF>

質問 1:最初に見つかった要素を取得するため
に使用する場合findall

version = "2.2.0.0"
found = list(txml.findall(".//BackEnd[@version='%s']" % version))
return found and found[0] or None

何も見つかりません。

ただし、要素にサブBackEnd要素が含まれるように XML ファイルを変更すると、

        <BackEnd state="disabled" version="2.2.0.0">
           <any_dummy_element/> 
        </BackEnd>

検索された要素が適切に見つかります。

あなたはそのような行動に直面しましたか?
私は sth を間違っていますか、これはElementTree実装のバグですか?

質問 2:
もう 1 つの問題は ですxmlns
XML の最初の行を次のように変更したとしますxmlns

<OTF xmlns="http://si-wiki/OTFCompatibility">
</OTF>

そのような場合、検索文字列を次のように変更する必要があります。

".//{http://si-wiki/OTFCompatibility}BackEnd[@version='%s']"

解析中に xmlns を無視し、すべての要素の名前 (ルートを含む) をプレフィックスがないように扱うように ElementTree に指示する方法はありますか?

よろしく、
ズビグニエフ

4

1 に答える 1

1

質問No1について:
セリフを入れ替えたとき

    found = list(txml.findall(".//BackEnd[@version='%s']" % version))
    return found and found[0] or None

    found = txml.findall(".//BackEnd[@version='%s']" % version)
    if found:
        return found[0]
    return None

その後、ダミーの子供のハックなしで正しい結果が返されます。

于 2011-02-18T13:14:05.480 に答える