xml转换为另一个xml
我有一个采用这种格式的大型xml文件xml转换为另一个xml,xml,transformation,Xml,Transformation,我有一个采用这种格式的大型xml文件 162 烙印 索尼 1. 162 类型 摄像机 1. 162 颜色 黄色的 1. 163 烙印 飞利浦 1. 163 类型 班长 1. .... 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 我想将
162
烙印
索尼
1.
162
类型
摄像机
1.
162
颜色
黄色的
1.
163
烙印
飞利浦
1.
163
类型
班长
1.
....
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 Brand Type Color
162 Sony Camera Yellow
163 Philips Monitor
这个文件有30000行,每个产品都有不同数量的属性。例如,产品162具有3个属性,但产品163具有2个属性。如果可能,我希望转换在excel之外(在linux环境中,如果我设置了cronjob)
提前谢谢 尝试以下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>
{value}
结果是:
<?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>
162
索尼
摄像机
黄色的
163
飞利浦
班长
当导入Excel时,它有望提供您想要的内容。看看它在哪里起作用
(我必须更正您的数据,使之成为格式良好的XML)我想到了带有Xmlstarlet的bash!非常感谢迈克尔·凯先生。但现在我看到在我的文件中有许多包含特殊字符的属性,例如机器类型(之间的空格)。所以,若我们转换为一个元素,那个么这个过程就会因为错误而停止。如何用xsl替换无效字符?。我看到该文件包含空格、括号和/。再次感谢!!!您可以使用translate()函数替换字符,也可以放弃使用属性名作为元素名的想法,而是生成(比如)
Monitor
。但这可能无法很好地导入Excel。使用此函数解决了问题:{value}。再次感谢你的帮助!!!
<?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>