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

XSLT: Mapping multiple elements in source xsd to a single element in target 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>

现在的问题是我需要将源中的每个元素 map/generate XML 转换为目标中的唯一元素。 我尝试使用 "choose"、"For each" 但它不起作用。 所以如果我们有任何解决方案来实现上述功能,请告诉我。

提前致谢。

示例输入和预期输出: 输入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>

鉴于您的示例输入:

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>

将return:

结果

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

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