<i>
<Row>
<Column name="RecordID" sqltype="nvarchar">COMPANY00022639</Column>
<Column name="product_name" sqltype="nvarchar">GeoBeacon</Column>
</Row>
<Row>
<Column name="RecordID" sqltype="nvarchar">COMPANY000226</Column>
<Column name="product_name" sqltype="nvarchar">GeoExplorer 2005 Series</Column>
</Row>
</i>
我需要将每一列映射到以下 xml 格式
<i>
<xsd:complexType name="remedyResponseObject">
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="1" name="Company_ID" type="xsd:string"/>
<xsd:element minOccurs="1" maxOccurs="1" name="product_name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</i>
我需要将每行的每一列映射到两个不同的变量中,其中 RecordID 在我的 xml 中Company_ID和product_name product_name。有人可以帮助我吗?
最后我需要我的结果集,如下所示
<i>
<remedyResponseObject>
<Company_ID>COMPANY00022639</Company_ID>
<product_name>GeoBeacon</product_name></remedyResponseObject>
<remedyResponseObject>
<Company_ID>COMPANY000226</Company_ID>
<product_name>GeoExplorer 2005 Series</product_name>
</remedyResponseObject>
</i>
您在这里没有映射到"变量",您实际上是将 Column 元素映射到其他元素。在 XSLT 的上下文中说"变量"可能表明您想使用 xsl:variable,但这里的情况并非如此。
尽管如此,进行映射还是直截了当的。您可以简单地创建一个模板来匹配您需要更改的 Column 元素,并输出要映射到的新元素。
例如,对于创建 Company_ID 元素,模板将如下所示
<xsl:template match="Column[@name='RecordID']">
<Company_ID><xsl:value-of select="." /></Company_ID>
</xsl:template>
产品名称也是如此。
唯一的其他模板是匹配根 i 元素的模板,您需要做的就是输出相同的 i 元素以及一个 remedyResponseObject 元素。
试试这个 XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="i">
<xsl:copy>
<remedyResponseObject>
<xsl:apply-templates />
</remedyResponseObject>
</xsl:copy>
</xsl:template>
<xsl:template match="Column[@name='RecordID']">
<Company_ID><xsl:value-of select="." /></Company_ID>
</xsl:template>
<xsl:template match="Column[@name='product_name']">
<product_name><xsl:value-of select="." /></product_name>
</xsl:template>
</xsl:stylesheet>
应用于输入 XML 时,输出如下
<i>
<remedyResponseObject>
<Company_ID>COMPANY00022639</Company_ID>
<product_name>GeoBeacon</product_name>
<Company_ID>COMPANY000226</Company_ID>
<product_name>GeoExplorer 2005 Series</product_name>
</remedyResponseObject>
</i>