Как я могу удалить пространства имен из дерева lxml?

После удаления из дочерних элементов в XML с помощью python

Благодаря @Tichodroma, у меня есть этот код:

Если вы можете использовать lxml , попробуйте следующее:

import lxml.etree tree = lxml.etree.parse("leg.xml") for dog in tree.xpath("//Leg1:Dog", namespaces={"Leg1": "http://what.not"}): parent = dog.xpath("..")[0] parent.remove(dog) parent.text = None tree.write("leg.out.xml") 

Теперь leg.out.xml выглядит так:

  <?xml version="1.0"?> <Leg1:MOR xmlns:Leg1="http://what.not" oCount="7"> <Leg1:Order> <Leg1:CTemp id="FO"> <Leg1:Group bNum="001" cCount="4"/> <Leg1:Group bNum="002" cCount="4"/> </Leg1:CTemp> <Leg1:CTemp id="GO"> <Leg1:Group bNum="001" cCount="4"/> <Leg1:Group bNum="002" cCount="4"/> </Leg1:CTemp> </Leg1:Order> </Leg1:MOR> 

Как мне изменить свой код, чтобы удалить Leg1: пространства Leg1: из всех имен тегов элементов?

  • Принуждение xml.etree для вывода «неиспользуемых» пространств имен
  • Python lxml iterfind w / namespace, но prefix = None
  • Python: игнорировать xmlns в elementtree.ElementTree
  • Хороший XML-парсер python для работы с тяжелыми документами пространства имен
  • Python xpath не работает?
  • Проблемы с пространством имен XHTML с помощью cssselect в lxml
  • python lxml findall с несколькими пространствами имен
  • Как использовать пространства имен xml с find / findall в lxml?
  • One Solution collect form web for “Как я могу удалить пространства имен из дерева lxml?”

    Один из возможных способов удаления префикса пространства имен из каждого элемента:

     def strip_ns_prefix(tree): #iterate through only element nodes (skip comment node, text node, etc) : for element in tree.xpath('descendant-or-self::*'): #if element has prefix... if element.prefix: #replace element name with its local name element.tag = etree.QName(element).localname return tree 

    Другая версия, которая проверяет пространство имен в xpath вместо использования оператора if :

     def strip_ns_prefix(tree): #xpath query for selecting all element nodes in namespace query = "descendant-or-self::*[namespace-uri()!='']" #for each element returned by the above xpath query... for element in tree.xpath(query): #replace element name with its local name element.tag = etree.QName(element).localname return tree 
    Interesting Posts

    Целочисленный квадратный корень в python

    Входные и выходные массивы numpy для h5py

    Psycopg2 использует память для большого запроса select

    Как обновить Mongo-документ после его вставки?

    Перемещение оси x в начало графика в matplotlib

    Как установить python-dateutil в Windows?

    Каков наилучший формат для сохранения изображения на Python и почему pydot сохраняет недопустимые изображения?

    рекомендуемая структура для разработки настольных компьютеров python

    Numpy: увеличивать элементы массива с учетом индексов, необходимых для увеличения

    Идентификация сертификата клиента по https не выполняется

    Запустить Python из Powershell

    Библиотека python_x64 + C, скомпилированная с помощью mingw_x64 в Windows7 Py_InitModule4

    Как я могу получить текущую неделю с помощью Python?

    Что происходит за кулисами, когда python добавляет небольшие ints?

    Извлечение списка лиц и организаций с использованием Stanford NER Tagger в NLTK

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