Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2d37673

Browse files
committed
Fix#228: make sure the lxml treewalker works with trees from lxml (#256)
r=nobody!
1 parent66a2f77 commit2d37673

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

‎html5lib/tests/test_treewalkers.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
importpytest
44

5+
try:
6+
importlxml.etree
7+
exceptImportError:
8+
pass
9+
510
from .supportimporttreeTypes
611

712
fromhtml5libimporthtml5parser,treewalkers
@@ -93,3 +98,19 @@ def test_treewalker_six_mix():
9398
fortreeinsorted(treeTypes.items()):
9499
forintext,attrs,expectedinsm_tests:
95100
yieldrunTreewalkerEditTest,intext,expected,attrs,tree
101+
102+
103+
@pytest.mark.skipif(treeTypes["lxml"]isNone,reason="lxml not importable")
104+
deftest_lxml_xml():
105+
expected= [
106+
{'data': {},'name':'div','namespace':None,'type':'StartTag'},
107+
{'data': {},'name':'div','namespace':None,'type':'StartTag'},
108+
{'name':'div','namespace':None,'type':'EndTag'},
109+
{'name':'div','namespace':None,'type':'EndTag'}
110+
]
111+
112+
lxmltree=lxml.etree.fromstring('<div><div></div></div>')
113+
walker=treewalkers.getTreeWalker('lxml')
114+
output=Lint(walker(lxmltree))
115+
116+
assertlist(output)==expected

‎html5lib/treewalkers/lxmletree.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,20 @@ class Root(object):
2222
def__init__(self,et):
2323
self.elementtree=et
2424
self.children= []
25-
ifet.docinfo.internalDTD:
26-
self.children.append(Doctype(self,
27-
ensure_str(et.docinfo.root_name),
28-
ensure_str(et.docinfo.public_id),
29-
ensure_str(et.docinfo.system_url)))
30-
root=et.getroot()
31-
node=root
25+
26+
try:
27+
ifet.docinfo.internalDTD:
28+
self.children.append(Doctype(self,
29+
ensure_str(et.docinfo.root_name),
30+
ensure_str(et.docinfo.public_id),
31+
ensure_str(et.docinfo.system_url)))
32+
exceptAttributeError:
33+
pass
34+
35+
try:
36+
node=et.getroot()
37+
exceptAttributeError:
38+
node=et
3239

3340
whilenode.getprevious()isnotNone:
3441
node=node.getprevious()
@@ -118,12 +125,12 @@ def __len__(self):
118125
classTreeWalker(_base.NonRecursiveTreeWalker):
119126
def__init__(self,tree):
120127
# pylint:disable=redefined-variable-type
121-
ifhasattr(tree,"getroot"):
122-
self.fragmentChildren=set()
123-
tree=Root(tree)
124-
elifisinstance(tree,list):
128+
ifisinstance(tree,list):
125129
self.fragmentChildren=set(tree)
126130
tree=FragmentRoot(tree)
131+
else:
132+
self.fragmentChildren=set()
133+
tree=Root(tree)
127134
_base.NonRecursiveTreeWalker.__init__(self,tree)
128135
self.filter=ihatexml.InfosetFilter()
129136

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp