解析XML CDATA节并使用ElementTree python将其转换为CSV

2024-04-25 20:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将XML文件转换为CSV文件。我的XML文件由不同的标记组成,我选择了一些对我的工作有用的标记。我只想访问文本标记之间的文本内容。我的问题是我不知道如何访问CDATA内容。因为某些文档中的文本有一个子图像,当我运行代码时,它只解析图像标记,并在我使用pandas读取CSV文件时显示NaN。我搜索了CDATA,但找不到任何标记来告诉解析器跳过图像标记并仅提取CDATA部分中的内容。此外,我尝试从文本中删除图像标记以解决问题,但当我这样做时,它删除了所有文本内容,以及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()

谢谢你的帮助


Tags: 文件csvtext标记图像文本内容doc
1条回答
网友
1楼 · 发布于 2024-04-25 20:31:28

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

下面的方法似乎有效。代码处理文本下的图像和文本下没有图像的情况

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

相关问题 更多 >