0
これは非常に簡単なことかもしれませんが、失敗し続けました。lxml/XPathでn番目の要素の取得に失敗する
root
に1つ以上の "< link/>"が含まれている場合、root.xpath( '(// link)')はそれらをすべて返します。しかし、root.xpath( '(// link)[0]')は空のリストを返します。なにが問題ですか?
from unittest import TestCase, TestProgram
class T(TestCase):
base_path = r'(//_:link)'
def test0ok(self):
self._test(2, self.base_path)
def test1ng(self):
self._test(1, self.base_path + r'[0]')
def _test(self, expected, path):
try:
from lxml.etree import fromstring as parse_xml_string
except ImportError:
raise
root = parse_xml_string(_xhtml)
nsmap = dict(_=root.nsmap[None])
gotten = root.xpath(path, namespaces=nsmap)
gotten = len(gotten)
self.assertEqual(expected, gotten)
_xhtml = br'''
<?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" xml:lang="en">
<head>
<link rev="made" href="./" />
<link rel="contents" href="./" />
<title>te</title>
</head>
<body>
<h1>st</h1>
</body>
</html>
'''[1:]
if __name__ == r'__main__':
TestProgram()