SQL Server中的动态XPath创建

时间:2013-01-17 12:50:45

标签: xpath

我有一个XML,我想动态获取Xml Node值。我想传递节点名称,作为回报,函数或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 Node的值时,我将传递相同的结果,我得到的结果是

脚本代码

对于LTABLE_DESC,结果应该是警惕的(&#39;&#39;你好&#39;&#39;)

但是我可以为两者编写2 Xpath查询,但是如果我的架构发生了变化(添加或删除了更多属性),那么我也必须更改我的SP。

谢谢, Mohit Jain

1 个答案:

答案 0 :(得分:0)

感谢您的回复。

我找到了解决方案:

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