0

XML があり、Xml ノードの値を動的に取得したいと考えています。ノード名を渡したいのですが、その見返りとして、関数または SP はそのノードの値を返す必要があります。

<ClassificationTypeEntity>

        <LTABLE_ID>3170</LTABLE_ID>

        <LTABLE_CODE>script Code</LTABLE_CODE>

        <LTABLE_DESC>alert(''hello'')</LTABLE_DESC>

        <ACTIVE_YES_NO>1</ACTIVE_YES_NO>enter code here

        <PRIVATE_FILING>0</PRIVATE_FILING>

        <RETENTION_CODE /><RETENTION_TITLE />

        <LTABLE_ID_P>0</LTABLE_ID_P>

</ClassificationTypeEntity>;

たとえば、上記の xml で、LTABLE_CODE ノードの値が必要な場合は、同じものを渡し、結果は次のようになります。

スクリプト コード

LTABLE_DESC についても同様で、結果は alert(''hello'') になります。

ただし、両方に対して 2 つの Xpath クエリを作成できますが、スキーマが変更された場合 (さらに多くのプロパティが追加または削除された場合)、SP も変更する必要があります。

ありがとう、モヒット・ジェイン

4

1 に答える 1

1

返信ありがとうございます。

私は解決策を見つけました:

declare @xmlData xml, @NodeName VarChar(500), @nodeValue VarChar(500)

Set @NodeName = 'LTABLE_CODE';

--Set @NodeName = 'LTABLE_DESC';

set @xmlData = 

 '<ClassificationTypeEntity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   <LTABLE_ID>3170</LTABLE_ID>

   <LTABLE_CODE>&lt;script&gt;al</LTABLE_CODE>

   <LTABLE_DESC>&lt;script&gt;alert(''hello'')&lt;/script&gt;</LTABLE_DESC>

   <ACTIVE_YES_NO>1</ACTIVE_YES_NO>

   <PRIVATE_FILING>0</PRIVATE_FILING>

   <RETENTION_CODE /><RETENTION_TITLE />

   <LTABLE_ID_P>0</LTABLE_ID_P>

</ClassificationTypeEntity>'

SET @nodeValue = @xmlData.value('(/ClassificationTypeEntity/*[local-name()=sql:variable("@NodeName")])[1]','nvarchar(max)')

SELECT @nodeValue
于 2013-01-18T14:18:56.360 に答える