xml转换为另一个xml

问题描述 投票:0回答:1

我有一个具有这种格式的大xml文件

<data>
<chars>
<prod>162</prod>
<atr>Brand</atr>
<value>Sony</value>
<filter>1</filter>
</chars>
<chars>
<prod>162</prod>
<atr>Type</atr>
<value>Camera</value>
<filter>1</filter>
</chars>
<chars>
<prod>162</prod>
<atr>Color</atr>
<value>yellow</value>
<filter>1</filter>
</chars>
<prod>163</prod>
<atr>Brand</atr>
<value>Philips</value>
<filter>1</filter>
</chars>
<chars>
<prod>163</prod>
<atr>Type</atr>
<value>Monitor</value>
<filter>1</filter>
</chars>
....
</data>

在excel中给出下表:

Prod Atr    Value   Filter
162  Brand  Sony    1
162  Type   Camera  1
162  Color  Yellow  1
163  Brand  Philips 1
163  Type   Monitor 1

我想将上述xml转换为xml格式以获取此表(不包括列过滤器:]

Prod  Atr1   Value1   Atr2  Value2   Atr3   Value3
162   Brand  Sony     Type  Camera   Color  Yellow
163   Brand  Philips  Type  Monitor        

或更好的结果

Prod  Brand   Type   Color
162   Sony    Camera Yellow
163   Philips Monitor 

此文件有30000行,每个产品都有不同数量的属性。例如,产品162具有3个属性,但是产品163具有2个属性。如果可能的话,我希望转换超出Excel的范围(在Linux环境中,如果我设置了cronjob)

提前感谢!

xml transformation
1个回答
0
投票
尝试此XSLT 3.0转换:

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0" expand-text="yes"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <data> <xsl:for-each-group select="/data/chars" group-by="prod"> <chars> <xsl:copy-of select="prod"/> <xsl:for-each select="current-group()"> <xsl:element name="{atr}">{value}</xsl:element> </xsl:for-each> </chars> </xsl:for-each-group> </data> </xsl:template> </xsl:transform>

结果是:

<?xml version="1.0" encoding="UTF-8"?> <data> <chars> <prod>162</prod> <Brand>Sony</Brand> <Type>Camera</Type> <Color>yellow</Color> </chars> <chars> <prod>163</prod> <Brand>Philips</Brand> <Type>Monitor</Type> </chars> </data>

希望可以在导入Excel时提供所需的内容。实际使用]

https://xsltfiddle.liberty-development.net/3NSTbeF

((我必须更正您的数据以使其格式正确的XML)

© www.soinside.com 2019 - 2024. All rights reserved.