以下给定格式需要XSLT映射帮助

时间:2013-08-24 18:05:30

标签: xml xslt xslt-1.0

<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到Company_ID,product_name到我的xml中的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>

1 个答案:

答案 0 :(得分:0)

您并未在此处映射到“变量”,实际上是将元素映射到其他元素。在XSLT的上下文中说'变量'可能会建议您使用 xsl:variable ,而这不是这种情况。

尽管如此,映射仍然是直截了当的。您只需创建一个模板以匹配您需要更改的元素,然后输出您想要映射到的新元素。

例如,要创建 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>