私はPython 2.7でBeautifulSoup4を使用していくつかのXMLファイルを解析しています。私がBSを使用している理由は、lxmlなどがうまく対応できないことは確かではありませんが、ドキュメントに無効なヘッダー、矛盾したエンコードなどが含まれることがわかっているからです。BeautifulSoup - 値を確認する
<root>
<person>
<identifier><identifier>
</person>
</root>
しかし、「識別子」の場合:私はいくつかの要素が非常に価値を持っているかどうかを確認しようとしている
... XML限り大丈夫です
if soup.person.identifier.string is None:
# reject file
です要素が完全に省略されています。「Noneには属性文字列がありません」というエラーが表示されます。
私の質問は、これを処理する最もきれいな方法は何ですか?私は値をチェックする前に要素が存在することを最初に確認する必要がないようにしたいと思う。
try:
identifier = soup.something.identifier.string
except:
identifier = None
if identifier is None:
# reject file
あまりにもビット長ったらしい思われるがあります。
私はちょうど両方を扱うでしょう
if len(root.xpath('person/identifier/text()') == 0
にしてくださいlxmlのを使用していた場合。
これは私がやろうとしているとは思わない。私はより適切な名前を使用して例を書き直し、うまくいけばそれをもっと明確にするでしょう。基本的には、必要な情報が提供されているかどうかを確認するために、文書に対して多くのチェックを行う必要があります。 – George
hm、多分まだ混乱しているかもしれませんが、私が作成する 'items'変数には、空白のテキストで見つけようとしている要素のリストがあります。要素がない場合、エラーは発生せず、空になります。だから、見つかったものがあるかどうかを知りたいなら 'len(items)'をチェックするだけです – Alter