Как преобразовать строку XML в датафрейм только с выбранными тегами и его значением в python - PullRequest
1 голос
/ 06 октября 2019

Пример моей большой строки XML выглядит следующим образом:

<RecordContainer RecordNumber = "1">
<catalog>
   <Person id="bk101">
      <person>
         <author>Gambardella, Matthew</author>
         <personal_info>
            <age>40</age>
            <DOB>19-02-1988</DOB>
         </personal_info> 
      </person>
      <books>
          <book id>1</book id>
          <title>XML Developer's Guide</title>
          <price>44.95</price>
          <publish>
             <publish_date>2000-10-01</publish_date>
             <info>this is the guide to XML</info>
          </publish>
      </books>
      <books>
          <book id>2</book id>
          <title>Python for beginners</title>
          <price>21.50</price>
          <publish>
             <publish_date>2002-005-5</publish_date>
             <info>this is the guide to Python</info>
          </publish>
      </books>
 </catalog>
</RecordContainer>
<RecordContainer RecordNumber = "2">
 <catalog>  
   <Person id="bk102">
      <person>
        <author>Ralls, Kim</author>
        <personal_info>
            <age>29</age>
            <DOB>11-05-1994</DOB>
         </personal_info> 
      </person>
      <books>
          <book id>1</book id>
          <title>Scala Prgramming</title>
          <price>15.90</price>
          <publish>
             <publish_date>2011-04-10</publish_date>
             <info>this is the guide to Scala Programming</info>
          </publish>
      </books>
      <books>
          <book id>2</book id>
          <title>PySpark for beginners</title>
          <price>25.50</price>
          <publish>
             <publish_date>2012-07-21</publish_date>
             <info>PySpark Guide</info>
          </publish>
      </books>
 </catalog>
</RecordContainer>

Мой ожидаемый вывод - это кадр данных pandas с выбранными тегами и его значениями, как показано ниже:

Record_Number  PersonID  author   DOB   book_id1  title1   publish_date1  book_id2  title2  publish_date2

Я пробовал с .find (.// element) , но не может получить доступ к каждому элементу по отдельности. Для синтаксического анализа файла я использовал следующий код:

from lxml import etree
tree = etree.fromstring("<root>"+input_data+"</root>")

После того, как приведенный выше код пытался получить каждый тег элемента и текст, используя .find (), но он не показывает ни одного в качестве текстового вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...