在PI XSLT映射中将xml字段转换为键/值对

在PI XSLT映射中将xml字段转换为键/值对,xslt,sap,xslt-1.0,sap-xi,sap-pi,Xslt,Sap,Xslt 1.0,Sap Xi,Sap Pi,在SAP PI中,我有来自rest服务(web配置器)的xml文件,这些文件的字段可以根据产品的不同而有所不同。例如,产品A具有颜色、高度和宽度,而产品B具有颜色、高度、宽度和深度 传入XML示例: <?xml version="1.0" encoding="UTF-8"?> <Order> <Products> <Product> <Color>Black</Color>

在SAP PI中,我有来自rest服务(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>

黑色
2000
1000
为了处理这个“通用”字段,我想通过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>

颜色
黑色
高度
2000
宽度
1000
我发现一篇文章用另一种方式来描述它
这是马丁告诉你的:

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

这是Martin告诉你的:

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




你到底在哪里处理这个问题?使用
获取“key”值是一项相当简单的任务。好吧,编写一个模板
match=“Product/*”
,然后在里面按字面意思创建您的结构。通过身份转换模板处理其余的问题。很抱歉问了这么一个基本的问题。xsl不是我经常使用的东西,我起初认为关键/价值的东西更复杂。我真的很感谢你的帮助和评论,thnx!你到底在哪里被困?使用
获取“key”值是一项相当简单的任务。好吧,编写一个模板
match=“Product/*”
,然后在里面按字面意思创建您的结构。通过身份转换模板处理其余的问题。很抱歉问了这么一个基本的问题。xsl不是我经常使用的东西,我起初认为关键/价值的东西更复杂。我真的很感谢你的帮助和评论,thnx!