正在解析 XML CDATA 部分并使用 ElementTree python 将其转换为 CSV

Parsing XML CDATA section and convert it to CSV using ElementTree python

我想将 XML 个文件转换为 CSV 文件。我的 XML 文件由不同的标签组成,我 select 其中一些对我的工作很有用。我只想访问 TEXT 标签之间的文本内容。我的问题是我不知道如何访问 CDATA 内容。因为某些 DOC 中的 TEXT 有一个 IMAGE 子项,所以当我 运行 我的代码时它只解析 IMAGE 标签并在我用 pandas 读取我的 CSV 文件时显示 NaN。我搜索了 CDATA,但找不到任何标记来告诉解析器跳过 IMAGE 标记并仅提取 CDATA 部分中的内容。此外,我尝试从 TEXT 中删除 IMAGE 标签来解决问题,但当我这样做时,它删除了所有 TEXT 内容,还有 CDATA 部分。

我的XML模式如下:

<root>
<DOC>
<TEXT>
<IMAGE>/1379/791012/p18-1.jpg</IMAGE>
<![CDATA[The section I want to access to]]>
</TEXT>
</DOC>
</root>

而且,这是我的解析代码:

def make_csv(folderpath, xmlfilename, csvwriter, csv_file):
  
  rows = []

  #Parse XML file
  tree = ET.parse(os.path.join(folderpath, xmlfilename))
  root = tree.getroot()
  
  for elem in root.findall("DOC") :
    rows = []

    sentence = elem.find("TEXT")
    if sentence != None:
        sentence = re.sub('\n', '', sent.text)
    rows.append(sentence)

    csvwriter.writerow(rows)
  csv_file.close()

感谢任何帮助。

My problem is that I don't know how to access CDATA content. Because TEXT in some DOCs has an IMAGE child

以下似乎可行。该代码处理了 TEXT 下有 IMAGE 和 TEXT 下没有 IMAGE 的情况。

import xml.etree.ElementTree as ET

xml = '''<?xml version="1.0" encoding="UTF-8"?>
<root>
   <DOC>
      <TEXT>
         <IMAGE>/1379/791012/p18-1.jpg</IMAGE>
         <![CDATA[The section I want to access to]]>
      </TEXT>
      <TEXT>
         <![CDATA[more text]]>
      </TEXT>
   </DOC></root>'''

root = ET.fromstring(xml)
texts = root.findall('.//TEXT')
for idx, text in enumerate(texts, start=1):
    data = list(text)[0].tail.strip() if list(text) else text.text.strip()
    print(f'{idx}) {data}')

输出

1) The section I want to access to
2) more text