2015-10-01 4 views
0
mainCourse = tree.xpath('//div[@id="RM1127"]/div[@class="m01"]/text()') 

Я пытаюсь извлечь список элементов внутри id RM1127. Это возвращает мне список. Как мне вставить пустую строку, если класс m01 не существует в id RM1127?Как мне изменить список xpath?

Я хочу, чтобы узнать, пропустил ли он что-то.

+0

Можете ли вы привести пример ввода и какой результат вы ожидаете? –

+0

Что вы здесь делаете, это взять все div только с [class = 'm01'] внутри div с [id = 'RM1127'], однако на самом деле не совсем ясно, в чем проблема. –

ответ

0

Список содержит только текстовые узлы, соответствующие выражению XPath, он не содержит информации о элементах, которые XPath не выбрал.

Вам нужно написать свою собственную логику, чтобы вставить пустую строку в список в случае, если 'класс m01 не существует в ID RM1127'. Одним из возможных подходов является модификацией XPath для выбора div[@id="RM1127"], так что вы можете через цикл полного комплекта div и вставить либо фактический целевой текст или пустой текст в список по мере необходимости, например:

mainCourse = [] 
for div in tree.xpath('//div[@id="RM1127"]'): 
    #store current list size 
    size = len(mainCourse) 
    #insert target text nodes to the list 
    mainCourse.extend(div.xpath('./div[@class="m01"]/text()')) 
    #if size doesn't change, meaning no target text nodes was found... 
    if size == len(mainCourse): 
     #...insert blank text to the list 
     mainCourse.append('') 
0

Не уверен, именно то, что вы хотите, но это будет сложно в XPath 1.0, потому что (a) единственный вид коллекции, которую вы можете вернуть, - это набор узлов, и (b) эти узлы должны быть узлами, выбранными из входного документа: вы можете Создайте что-нибудь новое, как пустую строку. Если вы не перейдете к чему-то более продвинутому, чем XPath 1.0 (например, XQuery), я думаю, вам нужно будет выбрать больше информации, чем вы хотите, а затем отфильтровать ее на уровне Python.

Смежные вопросы