2013-09-21 4 views
1

Мне нужна ваша помощь. Я использую библиотеку lxml для разбора файла dtd.Анализ dtd-файла с библиотекой lxml (python)

Как можно получить подвыражение c в этом примере?

dtd = etree.DTD(StringIO('<!ELEMENT a (b,c,d)>')) 

Я стараюсь это

content = dtd.elements()[0].content 

left, right = content.left, content.right 

но слева от правого подвыражения.

http://lxml.de/validation.html#id1

ответ

1

Я полностью угадал (я никогда не касался этого раньше), но:

from io import StringIO 
from lxml import etree 

dtd.elements()[0].content.right.left 
#>>> <lxml.etree._DTDElementContentDecl object name='c' type='element' occur='once' at 0x7f6999a28250> 

?

+0

спасибо, он действительно работает. У меня есть еще один вопрос: как я могу рассчитать количество элементов? – user2800220

+0

Зациклируйте переменную 'content' как дерево, подсчитывая количество конечных точек, с которыми вы сталкиваетесь. – Veedrac

+0

Я прошу рассчитать число подвыражений. (b, c, d) -> 3 – user2800220