получение атрибута элемента с его соответствующим 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) 
  • Одновременная обработка SAX больших, простых XML-файлов?
  • Извлечение информации о тегах с помощью beautifulsoup и python
  • Python: обновляйте XML-файл с помощью ElementTree, сохраняя при этом максимально возможный макет
  • Вытащить пакеты ошибок Java из файлов журналов
  • Обрезать некоторые элементы из большого xml-файла
  • Добавление атрибутов к существующим элементам, удаление элементов и т. Д. С помощью lxml
  • Python дает ошибку «Не правильно сформированный xml» из-за наличия символов «&»
  • Использование функции itertree python ElementTree и запись измененного дерева в выходной файл
  •  
    Interesting Posts for Van-Lav

    Классификация с несколькими метками для большого набора данных

    Как обрабатывать подкоманды CLI с помощью argparse

    В Python, как я могу получить доступ к пространству имен основного модуля из импортированного модуля?

    Объединить две строки в том же Dataframe, если их индекс одинаковый?

    Тестирование модуля: убедитесь, что файл / путь существует

    Почему в Docs-функции Python включена запятая после скобки для необязательных аргументов?

    Разбор RSS с Elementtree в Python

    Python, mpg123 и подпроцесс неправильно использовать stdin.write или общаться

    Большинство pythonic способов удалить файл, который может не существовать

    несколько баз данных и несколько моделей в django

    Когда мне нужно использовать sqlalchemy back_populates?

    python с использованием переменных из другого файла

    Как удалить ложный тег в BeautifulSoup

    Как создать действительный образец токена с полосой?

    Python urllib2.HTTPError: ошибка HTTP 503: служба недоступна на действующем веб-сайте

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