получение атрибута элемента с его соответствующим Id

предположим, что у меня есть этот xml-файл:

<article-set xmlns:ns0="http://casfwcewf.xsd" format-version="5"> <article> <article id="11234"> <source> <hostname>some hostname for 11234</hostname> </source> <feed> <type weight=0.32>RSS</type> </feed> <uri>some uri for 11234</uri> </article> <article id="63563"> <source> <hostname>some hostname for 63563 </hostname> </source> <feed> <type weight=0.86>RSS</type> </feed> <uri>some uri for 63563</uri> </article> . . . </article></article-set> 

я хочу, чтобы напечатать каждый идентификатор статьи с его удельным весом атрибута в RSS для всего документа (например, это).

 id=11234 weight= 0.32 id=63563 weight= 0.86 . . . 

Я использовал этот код для этого,

 from lxml import etree tree = etree.parse("C:\\Users\\Me\\Desktop\\public.xml") for article in tree.iter('article'): article_id = article.attrib.get('id') for weight in tree.xpath("//article[@id={}]/feed/type/@weight".format(article_id)): print(article_id,weight) 

и это не сработало, может ли кто-нибудь помочь мне в этом?

2 Solutions collect form web for “получение атрибута элемента с его соответствующим Id”

Вы можете сделать это в двух строках, если вы действительно этого хотите .

 >>> from lxml import etree >>> tree = etree.parse('public.xml') >>> for item in tree.xpath('.//article[@id]//type[@weight]'): ... item.xpath('../..')[0].attrib['id'], item.attrib['weight'] ... ('11234', '0.32') ('63563', '0.86') 

Одна используемая мной проверка xml настаивала на двойных кавычках вокруг значений для weight . etree на xml, пока я не сбросил первую строку в файле; Я не знаю почему.

Одно из них Это может сработать для вас:

В этой версии обратите внимание на добавление = в вызове tree.xpath() :

 from lxml import etree tree = etree.parse("news.xml") for article in tree.iter('article'): article_id = article.attrib.get('id') for weight in tree.xpath("//article[@id={}]/feed/type/@weight".format(article_id)): print(article_id,weight) 

Здесь обратите внимание, что я заменил tree.xpath() на article.xpath() :

 from lxml import etree tree = etree.parse("news.xml") for article in tree.iter('article'): article_id = article.attrib.get('id') for weight in article.xpath("./feed/type/@weight"): print(article_id,weight) 
  • Как сделать код более читаемым и DRYer при работе с пространствами имен XML в Python?
  • Анализ XML в Python с регулярным выражением
  • Разбирайте XML с (X) объектами HTML
  • Как найти элементы по полю 'id' в файле SVG с помощью Python
  • Какие доступные инструменты Python вы можете использовать для генерации XSD из XML-документа?
  • Как просмотреть текстовое представление элемента lxml?
  • Разбор чистых XML-тегов с LXML и Python
  • Unescape _xHHHH_ escape-последовательности XML с использованием Python
  • Python: Как получить текстовый контент XML-элемента с помощью xml.dom.minidom?
  • Может ли BeautifulSoup анализировать xml, когда определенный тег является самозакрывающимся и не в то же время
  • Напишите xml с указанием пути и значения
  •  
    Interesting Posts for Van-Lav

    Как импортировать / добавить существующий файл Python в проект PyCharm?

    Подпроцесс Python с / usr / bin / time: как записывать информацию о времени, но игнорировать все остальные данные?

    На месте замены текста в файле на Python

    как я могу использовать шаблон электронной почты в следующей функции?

    Как преобразовать список массивов numpy в один массив numpy?

    Использование self. * В качестве значения по умолчанию для метода

    Python, Firefox и Selenium 3: выбор значения из раскрывающегося списка не работает с Firefox 45

    Как сохранить только некоторые строки таблицы в python?

    Как красиво печатать в ноутбуке ipython через sympy? Печать только в формате pprint Unicode version

    "Объект AttributeError: 'module' не имеет атрибута" с установленным пакетом

    Запустите скрипт, когда пользователь нажмет печать, а не начнет буферизацию до окончания скрипта (linux, cups)

    QGraphicsPixmapItem не будет отображаться поверх другого QGraphicsPixmapItem

    Создайте два массива 2D numpy из списка строк

    Альтернативы сплавленного типа в цитоне

    Pythonic способ распечатать элементы списка

    Python - лучший язык программирования в мире.