Chr*_*cia 5 python xml xslt dataframe pandas
我有一个像这样的数据框:
第 1 列 | 列2 | 第 3 列 | 第 4 列 | 第5栏 | 第 6 栏 | 7 号栏 | 8 号栏 | 第 9 栏 | 第 10 栏 |
---|---|---|---|---|---|---|---|---|---|
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
我想创建一个像这样的xml:
<?xml version='1.0' encoding='utf-8'?>
<root xmlns:xsi="http://www.example.com" xmlns="http://www.example.com">
<all>
<col>
<col1>...</col1>
<col2>...</col2>
<col3>...</col3>
<col4>...</col4>
<col5>...</col5>
<col6>...</col6>
<group1>
<col7>...</col7>
<col8>...</col8>
</group1>
<group2>
<col9>...</col9>
<col10>...</col10>
</group2>
</col>
<col>
<col1>...</col1>
<col2>...</col2>
<col3>...</col3>
<col4>...</col4>
<col5>...</col5>
<col6>...</col6>
<group1>
<col7>...</col7>
<col8>...</col8>
</group1>
<group2>
<col9>...</col9>
<col10>...</col10>
</group2>
</col>
</all>
</root>
Run Code Online (Sandbox Code Playgroud)
我的解决方案是在 to_xml 函数中使用样式表,如下所示:
df.to_xml("example.xml", root_name='all', row_name='col', encoding='utf-8', xml_declaration=True, pretty_print=True, index=False, stylesheet='example.xslt')
Run Code Online (Sandbox Code Playgroud)
但我不知道如何编写 example.xslt 文件以及如何设置 to_xml 函数来获取所需的 xml。我正在寻找可能有效的 xslt 的建议和示例
您的功能设置to_xml
似乎没问题。在下面的代码中,我生成一个包含 20 行和 10 列的 DataFrame 来模拟您的示例。您将在下面找到一个xslt
可能适用于您给出的示例的文件示例以及该示例的 XML 输出。
import pandas as pd
import numpy as np
np.random.seed(42)
df = pd.DataFrame(np.random.randint(0,100,size=(20, 10)), columns=[f'col{i+1}' for i in range(10)])
df.to_xml("example.xml", root_name='all', row_name='col', encoding='utf-8', xml_declaration=True, pretty_print=True, index=False, stylesheet='example.xslt')
Run Code Online (Sandbox Code Playgroud)
文件示例.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>
<all>
<xsl:for-each select="all/col">
<col>
<col1><xsl:value-of select="col1"/></col1>
<col2><xsl:value-of select="col2"/></col2>
<col3><xsl:value-of select="col3"/></col3>
<col4><xsl:value-of select="col4"/></col4>
<col5><xsl:value-of select="col5"/></col5>
<col6><xsl:value-of select="col6"/></col6>
<group1>
<col7><xsl:value-of select="col7"/></col7>
<col8><xsl:value-of select="col8"/></col8>
</group1>
<group2>
<col9><xsl:value-of select="col9"/></col9>
<col10><xsl:value-of select="col10"/></col10>
</group2>
</col>
</xsl:for-each>
</all>
</root>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
输出文件example.xml
<?xml version="1.0"?>
<root>
<all>
<col>
<col1>51</col1>
<col2>92</col2>
<col3>14</col3>
<col4>71</col4>
<col5>60</col5>
<col6>20</col6>
<group1>
<col7>82</col7>
<col8>86</col8>
</group1>
<group2>
<col9>74</col9>
<col10>74</col10>
</group2>
</col>
<col>
<col1>87</col1>
<col2>99</col2>
<col3>23</col3>
<col4>2</col4>
...
...
...
Run Code Online (Sandbox Code Playgroud)