我有一个xml字段,我需要从节点中选择内部xml作为字符串,而不管内部xml是什么(在这种情况下,它是一个html图像标记)。我能够获得没有问题的纯文本,但是当我在其中有图像标记的东西时,我认为它将它视为子节点,因此它不会返回它。
declare @myXml xml = '<question><prompt><img src="someImage.png" /></prompt></question>';
select q.value('(prompt/text())[1]', 'nvarchar(max)') as prompt from @myXml.nodes('//question') qs(q);
以上是返回null。我想要的是节点作为字符串的实际内容。
答案 0 :(得分:1)
这应该有效....
select q.query('(prompt/node())') as prompt from @myXml.nodes('//question') qs(q);
text()
仅返回子节点的文本值,而node()
返回整个enchilada。
将CAST
添加到varchar中,您就完成了!
select cast(q.query('(prompt/node())') as varchar(100)) as prompt from @myXml.nodes('//question') qs(q);
答案 1 :(得分:0)
XQuery将XML视为节点树。如果要将节点树转换为词汇XML标记,则该操作称为序列化&#39;。 XQuery 3.0提供了一个函数fn:serialize()来将节点转换为词法XML,但在XQuery 1.0中没有等效的,除了一些XQuery实现可能有扩展来完成这项工作。