当xquery包含html图像标记时,使用xquery选择节点的内部xml作为字符串

时间:2014-11-21 18:53:38

标签: xml xquery-sql

我有一个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。我想要的是节点作为字符串的实际内容。

2 个答案:

答案 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实现可能有扩展来完成这项工作。