当前位置: 首页 > 知识库问答 >
问题:

转换。xml到。csv源

郎灿
2023-03-14

所以我试图转换一个. xml数据源:

转换成. csv但以这种格式格式化

我有重复的元素,比如“title”、“description”等,我想将它们从完全垂直的xml格式中提取出来,并将每个元素分解成一个单独的列。

我发现了一个工具,我相信它确实可以做到这一点,但我不知道如何设置它

我有两个文件——a。蝙蝠和。罐子在内部。bat我们有以下默认代码:

java-jarxml2csv-conv.jar%*

我不知道该怎么修改这个。有谁能提供一些建议吗?

共有2个答案

秦禄
2023-03-14

您可以编写非常简单的Python脚本,它使用lxml读取XML,并使用Python标准库中的CSV模块写入CSV。

xml_to_csv.py代码:

import argparse
import csv
from lxml import etree
import sys

def main():
    p = argparse.ArgumentParser()
    p.add_argument('xml_file')
    args = p.parse_args()
    xml_str = open(args.xml_file, 'rb').read()
    root = etree.XML(xml_str)
    w = csv.DictWriter(
        sys.stdout,
        fieldnames='''
            title description link
        '''.split())
    w.writeheader()
    for item in root.findall('./channel/item'):
        row = {
            'title': item.find('./title').text,
            'description': item.find('./description').text,
            'link': item.find('./link').text,
        }
        w.writerow(row)

if __name__ == '__main__':
    main()

feed。xml

<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="0.91">
    <channel>
        <title>Delphi Programming</title>
        <item>
            <title>How to draw rotated text</title>
            <link>http://delphi.about.com/1234.html</link>
            <description>This example creates...</description>
        </item>
        <item>
            <title>FutureValue function</title>
            <link>http://delphi.about.com/5678.html</link>
            <description>Returns the future...</description>
        </item>
    </channel>
</rss>

用法:

$ pip install lxml # if needed
$ python3 xml_to_csv.py  feed.xml 
title,description,link
How to draw rotated text,This example creates...,http://delphi.about.com/1234.html
FutureValue function,Returns the future...,http://delphi.about.com/5678.html
常献
2023-03-14

我不确定频道部分是否在重复,但项目部分显然在重复。要将其转化为一个健全的CSV结构,您需要知道重复的

无论如何——在您的案例中,数据的结构是这样的:键的名称是标记的名称,其内容是值。

我的建议是尝试将XPath应用于您的情况,如下所示:

<root>
  <record id="1">
    <keyA>val_1A</keyA>
    <keyB>val_1B</keyB>
  </record>
  <record id="2">
    <keyA>val_2A</keyA>
    <keyB>val_2B</keyB>
  </record>
  <record id="3">
    <keyA>val_3A</keyA>
    <keyB>val_3B</keyB>
  </record>
</root>

使用xmlstarlet,您可以解析这个XML文档(test.XML):

xmlstarlet \
    sel -T -t -m /root/record \
      -v "concat(@id,';',keyA,';',keyB)" \
      -n test.xml

1;val_1A;val_1B
2;val_2A;val_2B
3;val_3A;val_3B

您可以在以下教程中找到更多示例和解释:

使用XMLStarlet将XML文档转换为CSV

 类似资料:
  • 问题内容: 我在使用Python将XML文件转换为CSV时遇到很多麻烦。我看过很多论坛,都尝试过lxml和xmlutils.xml2csv,但是我无法使其正常工作。这是来自Garmin GPS设备的GPS数据。 这是我的XML文件的样子,当然是缩短了: 我的大型XML文件中有几个trk标记,但我可以设法将它们分开-它们代表GPS设备上的不同“段”或行程。我想要的只是一个CSV文件,它绘制了以下内容

  • 问题内容: 我有一组CSV数据要转换为XML。代码看起来不错,但是输出不够完美。它忽略了一些列,因为它们没有值,并且产生了很长的XML数据行,而不是破坏它。 这是我的CSV数据示例: 而我的代码: 当对以上数据执行此代码时,将产生: 我本人以这种形式安排它,但是输出结果很长。产生的输出应为: 问题答案: 我同意Kennet。 我只是添加了 这在元素之间添加了新行,并允许缩进。 更新 首先,我们要介

  • 问题内容: 什么是转换不同的方法来,我知道有一个选项,但想知道是什么其他可用于相同? 注意: 我没有进一步的要求,因此我不能在这个问题上添加更多内容,但是在此时,如果我能知道有哪些不同的方法可用于转换,那将非常棒。 更新: 建议的不同方法是: javax.xml.bind.Marshaller和javax.xml.bind.Unmarshaller XStream的 XMLBean jaxb ca

  • 问题内容: @Before可能会有一些重复的问题建议,我不认为可能是这种情况,请先阅读本章,我会尽量简短。标题给出了基本思路。 这是一个XML示例(案例1): 这是一个XML示例(案例2): 我从Google借用了这种XML,无论如何,我的对象并不总是相同的,有时还有像case2这样的额外元素。现在,我想从两种情况下生成这样的CSV: 这第一行是标头,它也应包含在csv中。我今天有一些有用的指向s

  • 问题内容: 有人知道将SGML转换为XML的方法或库吗? 编辑:为澄清起见,我必须在Java中进行转换,并且无法使用SP解析器或相关的SX工具。 问题答案: 似乎普遍的共识是,没有可用的Java进行SGML工作的库。毫无疑问,经过几天无能为力的搜索Google并在这里提出这个问题之后,我没有找到有关此主题的资源。

  • 问题内容: 是否有在Ruby中将XML转换为JSON的库? 问题答案: 一个简单的把戏: 首先,您需要,然后在使用Rails时可以执行以下操作: 如果您不使用Rails,则可以要求它,并且事情应该顺利进行。 例: