2

属性のデータをSQLの同じ列の新しい属性にコピーする方法

元データ

<root>
<child attr='hello'></child>
</root>

結果1

<root>
<child attr='hello' attr2='hello'></child>
</root>

結果2(修正あり)

<root>
<child attr='hello' attr2='**H**ello **W**orld'></child>
</root>

SQL XML Xquery を介してのみこれを実行したい

4

3 に答える 3

1

2番目の結果であなたが望んでいることを正確に実行できるかどうかはわかりませんが、それを突き止めます。以下の最初の例では、結果#1が生成されます(元のデータをtest.xmlに入れました)実際のデータでは、「child」と「attr」が繰り返される可能性があると想定しています):

<root>{
  for $child in doc('test.xml')/root/*
  return
    element {name($child)} {
      for $attr at $index in $child/@*
      return (
        attribute {name($attr)} {$attr},
        attribute {concat(name($attr), 2)} {$attr}
      )
    }
}</root>

次のように、結果#2のように、別の値を入力するように変更できます。

<root>{
  for $child in doc('test.xml')/root/*
  return
    element {name($child)} {
      for $attr at $index in $child/@*
      return (
        attribute {name($attr)} {$attr},
        attribute {concat(name($attr), 2)} {
          '**H**ello **W**orld' 
        }
      )
    }
}</root>

お役に立てば幸いです。

于 2010-04-14T03:12:47.707 に答える
0

XSLT を使用できると仮定すると、次のようにします。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

    <xsl:output method="xml" indent="yes" omit-xml-declaration="no" />

    <xsl:template match="root">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="child">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:attribute name="attr2">
                <xsl:value-of select="@attr"/>
            </xsl:attribute>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet> 

または、結果 2 を変更する場合は<xsl:template match="child">、次のように置き換えます。

<xsl:template match="child">
    <xsl:copy>
        <xsl:copy-of select="@*"/>
        <xsl:attribute name="attr2">
            <xsl:value-of>
                <xsl:text>**H**ello **W**orld</xsl:text>
            </xsl:value-of>
        </xsl:attribute>
    </xsl:copy>
</xsl:template>
于 2010-04-09T07:09:08.683 に答える