xslt - 在 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
解决方案
这是马丁告诉你的:
<?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>
推荐阅读
- node.js - Node.js readline 属性不要求输入
- c - 我想不出在 C 中打印正确的中位数
- java - 猪拉丁法
- javascript - javascript调用者正在被删除还有什么替代方法?
- javascript - JSDoc:如何让 IntelliSense/TypeScript 了解其他文件中的类?
- linux - Bash 脚本文件作为输入
- angular - 尝试访问创建的新属性时未定义
- java - java.lang.NumberFormatException:对于输入字符串:“”在使用ticker进行倒计时时出现此错误
- python-3.x - 如何使用继承修改 Python 模块中的变量值
- c# - 如何在 Blazer 组件中注册 http 客户端服务