2015-07-03 2 views
0

Вот мой код и XML:поиск XML текстом тегов с помощью питона

xml_string = """ 
<data> 
    <user> 
     <name>123</name> 
    </user> 
    <user> 
     <name>456</name> 
    </user> 
</data> 
""" 

import xml.etree.ElementTree as ET 
root = ET.fromstring(xml_string) 

Я пытаюсь найти <user> тег где <name> имеет текстовое значение, равное 123.

То, что я пытался:

result = root.findall("./user[name = '123']") 
result = root.findall("./user[./name = '123']") 
result = root.findall("./user[/name = '123']") 
result = root.findall("./user[./name text() = '123']") 

Ни одна из этих попыток не работала. Что мне не хватает?

Ошибка я получаю:

raise SyntaxError("invalid predicate") 
File "<string>", line None 
SyntaxError: invalid predicate 
+0

Возможно, регулярное выражение может работать? –

+0

Если это то, что вы пытаетесь найти '', regex выполнит эту работу. –

+6

@JoeR это точно противоположно совету, который вы должны дать; regex is * not * лучший способ анализа XML, который * не * является обычным языком, см., например, http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – jonrsharpe

ответ

3

Как говорит исключением, кажется, у вас есть ошибка синтаксиса в предикат, не должен быть пробел между именем тега и значение:

xml_string = """ 
<data> 
    <user> 
     <name>123</name> 
    </user> 
    <user> 
     <name>456</name> 
    </user> 
</data> 
""" 

import xml.etree.ElementTree as ET 
root = ET.fromstring(xml_string) 

result = root.findall("./user[name='123']") 

print result 
+0

Вот и все! благодаря –

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