我有一个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
答案 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><script>al</LTABLE_CODE>
<LTABLE_DESC><script>alert(''hello'')</script></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