私はXSLTファイルを使って、テーブルを表すXML文書をSQLコマンドに変換しています。私は、INSERTコマンドを作成するには、次のXSLTを書いたfor-each内のXSLT動的属性
<Table>
<ObjectAttributes>
<AttributeDetail>
<Name>COLNAME1</Name>
...
</AttributeDetail>
<AttributeDetail>
<Name>COLNAME2</Name>
...
</AttributeDetail>
...
</ObjectAttributes>
<Record RowID="00001">
<Attributes>
<Attr>
<AttrName>COLNAME1</AttrName>
<AttrValue>VALUE</AttrValue>
</Attr>
<Attr>
<AttrName>COLNAME2</AttrName>
<AttrValue>VALUE</AttrValue>
</Attr>
...
</Attributes>
</Record>
<Record RowID="00002">
<Attributes>
<Attr>
<AttrName>COLNAME1</AttrName>
<AttrValue>VALUE</AttrValue>
</Attr>
<Attr>
<AttrName>COLNAME2</AttrName>
<AttrValue>VALUE</AttrValue>
</Attr>
...
</Attributes>
</Record>
...
</Table>
:
<xsl:for-each select="/Table/Record">
<xsl:variable name="ThisRecord" select="."/>
<Command>
INSERT INTO <xsl:value-of select="../ObjectName"/>
(ROWID,
<xsl:for-each select="../ObjectAttributes/AttributeDetail">
<xsl:value-of select="Name"/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>)
VALUES
(<xsl:value-of select="@RowID"/>,
<xsl:for-each select="../ObjectAttributes/AttributeDetail">
<xsl:text>'</xsl:text><xsl:value-of select="$ThisRecord/Attributes/Attr/AttrValue[../AttrName='COLNAME1']"/><xsl:text>'</xsl:text>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>)
</Command>
</xsl:for-each>
これは、事実を除いて、素晴らしい作品XMLは、テーブルの列と次のような構造を持つデータの各行の両方を記述します私はから生じる値でAttrNameに=「」の値を交換する方法を見つけ出すのに苦労してること:私は変数に置き換える試みた
<xsl:value-of select="Name"/>
が、THI sは動作しませんでした:
<xsl:variable name="ThisAttr" select="Name"/>
<xsl:value-of select="$ThisRecord/Attributes/Attr/AttrValue[../AttrName='$ThisAttr']"/>
この属性を動的に入力する方法はありますか。
ありがとうございます!
あなただけのために、各/録音オーバー/属性名のために1回、2回属性、およびすることはできません属性値の2回目? ObjectAttributesの名前はAttributesセクションのAttrNameと同じですか? – dash
これはうまくいくはずですが、レコードの属性がオブジェクトに確実に存在するように、各/ Record/AttributesをObjectAttributesにマッチさせたいと考えていました。 – Paul
十分なフェア! $ thisRecord/Attributes/Attr [AttrName = $ ThisAttr]/AttrValue - あなたはあなたがattrNameという子でattrを見つけたと言うだけのあなたのAttrNameチェックを間違った場所に持っています= $ ThisAttrの名前をクリックし、AttrValueを選択します。 – dash