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。
我需要使用 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。