2012-02-19 5 views
0

У меня есть следующий XML:Найти XPATH с пространством имен на основе атрибута элемента

<assets> 
    <asset type="full"> 
     <file_name>WME__HD_2CH_EN_16X9_178_2398_FINAL.mov</file_name> 
    </asset> 
    ... 
</assets> 

У меня есть несколько asset блоков, так что мне нужно ссылаться на атрибут type = "full". Это то, что я в настоящее время, чтобы ссылаться на них все -

node.xpath("//t:assets/t:asset/t:file_name/text()", 
      namespaces={'t':'http://apple.com/itunes/importer'}) 

Как бы я ссылаться только данный актив с type = "full"?

ответ

2

Вы можете добавить селектор [@type="full"] атрибута на t:asset:

node.xpath("//t:assets/t:asset[@type='full']/t:file_name/text()", 
     namespaces={'t':'http://apple.com/itunes/importer'}) 
0
node.xpath("//t:assets/t:asset[@type='full']/t:file_name/text()", 
     namespaces={'t':'http://apple.com/itunes/importer'}) 
1

Попробуйте

node.xpath("//t:assets/t:asset[@type='full']/t:file_name/text()", 
     namespaces={'t':'http://apple.com/itunes/importer'}) 

@ нотация используется для выбора атрибутов через XPath.

Итак, t:asset[@type='full'] означает выбрать все asset элемента, который имеет атрибут type и значение full.

Посмотрите здесь xpath synatx.