Почему ElementTree не может правильно проанализировать этот тег XML?

0

Файл XML выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<MINiML
   xmlns="http://www.ncbi.nlm.nih.gov/geo/info/MINiML"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.ncbi.nlm.nih.gov/geo/info/MINiML http://www.ncbi.nlm.nih.gov/geo/info/MINiML.xsd"
   version="0.5.0" >

  <Contributor iid="contrib1">
    <Person><First>ENCODE</First><Last>DCC</Last></Person>
    <Email>[email protected]</Email>
    <Organization>ENCODE DCC</Organization>
    <Address>
      <Line>300 Pasteur Dr</Line>
      <City>Stanford</City>
      <State>CA</State>
      <Zip-Code>94305-5120</Zip-Code>
      <Country>USA</Country>
    </Address>
  </Contributor>
</MINiML>

Вот как я использую ElementTree в Python:

import xml.etree.cElementTree as ET
tree=ET.parse("the_file_above.xml")
root = tree.getroot()
for c in root:
    print c.tag, c.attrib

Он возвращает:

{http://www.ncbi.nlm.nih.gov/geo/info/MINiML}Contributor {'iid': 'contrib1'}

И значение c.tag - это '{http://www.ncbi.nlm.nih.gov/geo/info/MINiML}Contributor', который я ожидал стать Contributor. Я не знаю, как длинный URL-адрес смешивался в теге. У кого-нибудь есть идеи об этом?

Теги:
tags
elementtree

1 ответ

0
Лучший ответ

Эта библиотека (как и другие) пытается кодировать пространство имен, используемое в именах тегов. Это делается путем добавления пространства имен в фигурные скобки. Таким образом, это просто функция, о которой вы, возможно, не знаете, и которая может быть громоздкой для вас. Но это необходимо, если вы смешиваете XML файлы из разных источников с различными пространствами имен, в которых в противном случае конфликтуют имена тегов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню