我正在寻找一些帮助构建XSLT样式表。我提供了输入XML。我需要将它转换为显示的输出XML。
我在想......
如果是元素,则字符串连接并格式化
<businessElements>
<key>requestId</key>
<type>String</type>
<value>TV00001001</value>
</businessElements>
<entity1>
<requestID>TV00001001</requestID> //nested entities
<entity2>
<effectiveDt>2001-12-31T12:00:00</effectiveDt> // attribute with value
<companyCd>companyCd</companyCd>
< entity3>
<vo1>
<att1>true</ att1>
< att2>vehicleId</att2>
<att3>true</att3>
</vo1>
</ entity3>
</ entity2>
</ entity1>
< entity1>
<businessElements>
<key>requestId</key>
<type>String</type>
<value>TV00001001</value>
</businessElements>
< entity2>
<businessElements>
<key>effectiveDt</key>
<type>Date</type>
<value>12/11/2016</value>
</businessElements>
<businessElements>
<key>companyCd</key>
<type>String</type>
<value>0001</value>
</businessElements>
< entity3>
< vo1>
<businessElements>
<key>vehicleId</key>
<type>String</type>
<value>5</value>
</businessElements>
</ vo1>
</ entity3>
</ entity2>
</ entity1>
答案 0 :(得分:0)
我在输出中看不到任何可辨别的逻辑 - 特别是因为它包含输入中没有的值。
以此为出发点:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(*)]">
<businessElements>
<key>
<xsl:value-of select="name()" />
</key>
<type>???</type>
<value>
<xsl:value-of select="." />
</value>
</businessElements>
</xsl:template>
</xsl:stylesheet>
这将获取所有叶节点(没有其他元素作为其子元素的元素)并将它们转换为businessElements
节点,其中key
是原始元素的名称,{{1是它的字符串值。
我不确定value
值应该来自何处。
应用于以下格式良好(!)输入示例:
<强> XML 强>
type
结果将是:
<entity1>
<requestID>TV00001001</requestID>
<entity2>
<effectiveDt>2001-12-31T12:00:00</effectiveDt>
<companyCd>companyCd</companyCd>
<entity3>
<vo1>
<att1>true</att1>
<att2>vehicleId</att2>
<att3>true</att3>
</vo1>
</entity3>
</entity2>
</entity1>