1
<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> 

すべての行の各列を 2 つの異なる変数にマップする必要があります。ここで、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>
4

1 に答える 1

0

ここでは「変数」にマッピングしていません。実際には、要素を他の要素にマッピングしています。XSLT のコンテキストで「変数」と言うと、xsl:variableを使用したいと思われるかもしれませんが、ここではそうではありません。

それでも、マッピングを行うのは簡単です。変更する必要がある列要素に一致するテンプレートを作成し、マップ先の新しい要素を出力するだけです。

たとえば、Company_ID要素を作成する場合、テンプレートは次のようになります。

<xsl:template match="Column[@name='RecordID']">
    <Company_ID><xsl:value-of select="." /></Company_ID>
</xsl:template>

商品名も同様です。

唯一の他のテンプレートは、ルートi要素に一致するテンプレートです。ここで行う必要があるのは、 remedyResponseObject要素と共に同じi要素を出力することだけです。

この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>
于 2013-08-24T21:50:25.970 に答える