3

「FOR XML」を使用して SQL からテーブル行とテーブル データ (HTML タグ付き) を取得しています。CSS クラスを SQL の html タグに割り当てる方法はありますか?

私が現在得ているもの: <tr><td>Name</td><td>Value</td></tr>

SQL クエリ:

SELECT  (SELECT [Name] as [td] FOR XML PATH(''), type),
        (SELECT [Value] as [td] FOR XML PATH(''), type)
FROM    table
FOR XML PATH('tr')

望ましい出力:

<tr class="test1"> <td class="test2">Name</td> <td class="test3">Value</td> </tr>

4

4 に答える 4

4

私は自分の質問に答えていることを知っていますが、他の人の助けになるかもしれないと考えました。

クラスを属性として XML ノードに追加しているため、目的の出力が得られます。

SELECT  'test1' AS [@class]
    , ( SELECT  'test2' as [@class]
        , (SELECT 'Name' FOR XML PATH(''))
        FOR XML PATH('td'), type)
    ,(SELECT  'test3' as [@class]
        , (SELECT 'Value' FOR XML PATH(''))
        FOR XML PATH('td'), type) 
FOR XML PATH('tr'), type


出力:
<tr class="test1"><td class="test2">Name</td><td class="test3">Value</td></tr>

于 2013-10-10T22:49:48.853 に答える
0

T-SQL を使用すると、SQL で属性パスを指定できます。 関連する MSDN ページ また、フィールドの内容を正しい名前の現在の行の要素のデータに指定できます。

SELECT 'test1' as [@class],
      (SELECT [Name] as [*], 'test2' as [@class] FOR XML PATH('td'), type),
      (SELECT [Value] as [*], 'test3' as [@class] FOR XML PATH('td'), type)
FROM table
FOR XML PATH('tr') 

ただし、可能であれば、SQL Server で XML データを生成し、サーバーの外部で XSL 変換を使用して必要な HTML に変換する必要があります。そうすれば、クエリがよりクリーンになり、サーバーの負荷が少し軽減され、懸念事項の分離が大幅に改善されます。


T-SQL:

SELECT 
    Name , 
    Value 
FROM table 
FOR XML AUTO

のような XML を取得します

<table name="name" value="value" />

XSLT:

<xsl:template match="table">
    <tr class="test1">
        <td class="test2">
            <xsl:value-of select="@name" />
        </td>
        <td class="test3">
            <xsl:value-of select="@value" />
        </td>
    </tr>
</xsl:template>

(X)HTML のような結果になります

<tr class="test1">
    <td class="test2">Name</td>
    <td class="test3">Value</td>
</tr>
于 2013-05-17T00:57:12.660 に答える
0

フィールドの値に基づいて tr クラスを作成するという同様の問題を解決したかったのですが、与えられた解決策も FOR EXPLICIT も機能しませんでした。私のプロジェクトでは、Data-Table と Twitter Bootstrap CSS のバージョンを使用して、HTML テーブルのスタイルを設定しています。これが私のために働いた解決策です:

DECLARE @tab varchar(max),
        @header varchar(8000),
        @fields varchar(8000),
        @sql varchar(8000)
DECLARE @rtab TABLE (html varchar(max))

SET @fields = '[field 1], [field 2], [field 3]'

SELECT @sql = 'WITH cte (SELECT * FROM table)
SELECT CAST ((
SELECT CASE 
  WHEN [CriteriaField] = ''Value1'' THEN ''error''
  WHEN [CriteriaField] = ''Value2'' THEN ''success''
  WHEN [CriteriaField] = ''Value3'' THEN ''warning''
  ELSE NULL END
AS [@class], (
SELECT ' + REPLACE(@fields, ',', ' AS td,') + ' AS td' + ' 
FOR XML RAW(''''), ELEMENTS)
FROM cte
FOR XML PATH(''tr'')) AS nvarchar(max))'

INSERT INTO @rtab EXEC(@sql)

SELECT @tab = @tab + REPLACE(REPLACE(REPLACE(REPLACE(html, '&lt;', '<'), '&gt;', '>'), '&amp;gt;', '>'), '&amp;lt;', '<')  --Restore SQL Server's replacement tags.  
SELECT @tab = REPLACE(@tab, '&amp;', '&') --Restore replacement ampersands (anchor links in the data)

SELECT @header = REPLACE(@fields, ',', '</th><th>')
SELECT @header = '<th>' + @header + '</th>'
SELECT @header = '<tr>' + @header + '</tr>'
SELECT @header = REPLACE(REPLACE(@header, '[', ''), ']', '')

SELECT @tab = '<thead>' + @header + '</thead><tbody>' + @tab + '</tbody></table>'
SELECT @tab = '<table id="data-table" class="table table-bordered">' + @tab
SELECT @tab
于 2014-02-19T09:16:10.680 に答える
0

次のように、コードの最後の行に「FOR XML RAW('tr'), ELEMENTS」を使用します。

SELECT [Name] as td, [Value] as td FROM table FOR XML RAW('tr'), ELEMENTS

ありがとう

于 2017-08-16T21:25:41.233 に答える