[英]Transform xml fields to key/value pairs in PI XSLT mapping
在 SAP PI 中,我有来自其余服务(Web 配置器)的 xml 文件,这些文件的字段可能因产品而异。 例如,产品 A 具有颜色、高度和宽度,而产品 B 具有颜色、高度、宽度和深度。
示例传入 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Order>
<Products>
<Product>
<Color>Black</Color>
<Height>2000</Height>
<Width>1000</Width>
</Product>
</Products>
</Order>
为了处理这个“通用”,我想通过 1.0 XSL 转换将字段转换为某种键/值对结构。
示例所需的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Order>
<Products>
<Product>
<Var>
<VarName>Color</VarName>
<VarValue>Black</VarValue>
</Var>
<Var>
<VarName>Height</VarName>
<VarValue>2000</VarValue>
</Var>
<Var>
<VarName>Width</VarName>
<VarValue>1000</VarValue>
</Var>
</Product>
</Products>
</Order>
我找到了一篇文章,它以另一种方式描述了XSLT:Convert Name/Value pair and transform an XML
这是马丁告诉你的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="Product/*">
<Var>
<VarName>
<xsl:value-of select="name()"/>
</VarName>
<VarValue>
<xsl:value-of select="."/>
</VarValue>
</Var>
</xsl:template>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Products">
<xsl:copy>
<xsl:for-each select="Product">
<Product>
<xsl:for-each select="./*">
<Var>
<VarName><xsl:value-of select="local-name()"/></VarName>
<VarValue><xsl:value-of select="."/></VarValue>
</Var>
</xsl:for-each>
</Product>
</xsl:for-each>
</xsl:copy>
</xsl:template>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.