我有一个具有这种格式的大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)
提前感谢!
<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)