首页 > 解决方案 > 在 PI XSLT 映射中将 xml 字段转换为键/值对

问题描述

在 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

标签: xsltsapxslt-1.0sap-xisap-pi

解决方案


这是马丁告诉你的:

<?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>

推荐阅读