XSLT:将源xsd中的多个元素映射到目标XSD中的单个元素

时间:2016-03-04 16:29:01

标签: xslt xsd

我需要使用XSLT转换将源XSD中的多个元素映射到目标XSD中的单个元素。让我用一个例子来解释一下: 源XSD将如下所示

<xsd:element name="SDQ">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="C1" type="xsd:string" />
   <xsd:element name="C2" type="xsd:string" />
   <xsd:element name="C3" type="xsd:string" />
  . . and so on
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

目标XSD将是:

<xsd:element name="StoreNumber">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="C1" type="xsd:string" />
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

现在问题是我需要为源中的每个元素映射/生成XML到Target中唯一的元素。 我尝试使用“选择”,“为每个人”,但它不起作用。 如果我们有任何解决方案可以实现上述功能,请告诉我。

提前致谢。

样本输入和预期输出: 输入XML:

<Segment-SDQ> <Element-67>008</Element-67> <Element-67_1>018</Element-67_1> <Element-67_2>027</Element-67_2> <Element-67_3>044</Element-67_3> </Segment-SDQ>

必需的输出:

<StoreNumber> <c1>008</c1> <c1>018</c1> <c1>027</c1> </StoreNumber>

1 个答案:

答案 0 :(得分:0)

给出您的示例输入:

<强> XML

<Segment-SDQ>
   <Element-67>008</Element-67>
   <Element-67_1>018</Element-67_1>
   <Element-67_2>027</Element-67_2>
   <Element-67_3>044</Element-67_3>
</Segment-SDQ>

以下样式表:

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:template match="/Segment-SDQ">
    <StoreNumber>
        <xsl:for-each select="*">
            <c1>
                <xsl:value-of select="." />
            </c1>
        </xsl:for-each>
    </StoreNumber>
</xsl:template>

</xsl:stylesheet>

将返回:

<强>结果

<?xml version="1.0" encoding="UTF-8"?>
<StoreNumber>
   <c1>008</c1>
   <c1>018</c1>
   <c1>027</c1>
   <c1>044</c1>
</StoreNumber>

请注意,您的输入和输出都不符合您问题中显示的XSD。