質問する
1235 次
1 に答える
2
実際に解析しようとしているデータの少なくとも一部を投稿したい場合があります。その情報がないので、推測です。要素が既定の XML 名前空間を定義している場合は、
<html>
要素を探すときにそれを使用する必要があります。たとえば、次の簡単なドキュメントを見てください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"
xml:lang="en">
<head>
<title>Document Title</title>
</head>
<body>
</body>
</html>
この入力が与えられた場合、以下は結果を返しません。
>>> doc = etree.parse(open('foo.html'))
>>> doc.xpath('//title')
[]
名前空間を指定せずに要素を探しているため、これは失敗し<title>
ます...そして名前空間がないと、パーサーは一致を見つけられません (とが XML 名前空間として定義されていると仮定すると、 とfoo:title
は異なる
ため)。bar:title
foo:
bar:
次のように、ElementTree インターフェイスで名前空間を明示的に使用できます。
>>> doc.xpath('//html:title',
... namespaces={'html': 'http://www.w3.org/1999/xhtml'})
[<Element {http://www.w3.org/1999/xhtml}title at 0x1087910>]
そして、私たちの試合があります。
名前空間プレフィックスをtag
iterparse の引数に渡すこともできます:
>>> titleIter = etree.iterparse(StringIO(str),
... tag='{http://www.w3.org/1999/xhtml}title')
>>> list(titleIter)
[(u'end', <Element {http://www.w3.org/1999/xhtml}title at 0x7fddb7c4b8c0>)]
これで問題が解決しない場合は、サンプル入力を投稿してください。そこから作業を進めます。
于 2012-04-24T01:40:07.603 に答える