在sqlserver中使用XPath如何返回标记的所有混合内容

时间:2015-07-20 08:08:15

标签: html sql-server xpath

所以例如

选择此节点时

<p>
   This is an open access article under the terms of the 
   <url href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative Commons Attribution‐NonCommercial‐NoDerivs</url>
   License, which permits use and distribution in any medium, provided the original work is properly cited, the use is non‐commercial and no modifications or adaptations are made.
</p>

只有带有url标签的文字我想保留

目前我可以使用以下sql

从中选择所有内容
select
    isnull(pMetaUnitlegal.value('(*:p/node())[1]','varchar(255)') ,'')
    + isnull(pMetaUnitlegal.value('(*:p/node())[2]','varchar(255)') ,'')
    + isnull(pMetaUnitlegal.value('(*:p/node())[3]','varchar(255)') ,'') legal_statement
from XMLwithOpenXML
OUTER APPLY XMLData.nodes('/*:component/*:header/*:publicationMeta[@level = "unit"]/*:legalStatement') pmul(pMetaUnitlegal)

我得到了

  

根据知识共享署名 - 非商业性使用 - 非执照许可条款,这是一篇开放获取文章,允许在任何介质中使用和分发,前提是原始作品被正确引用,使用是非商业性的,不得修改或做出了改编。

但我真正想要的是

<p>
   This is an open access article under the terms of the 
   <url href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative Commons Attribution‐NonCommercial‐NoDerivs</url>
   License, which permits use and distribution in any medium, provided the original work is properly cited, the use is non‐commercial and no modifications or adaptations are made.
</p>

仍然嵌入了html标记

当我使用text()评估器时,我得到的数据更少。 url节点完全丢弃

  

根据许可条款,这是一个开放获取的文章,允许在任何介质中使用和分发,前提是原始作品被正确引用,使用是非商业性的,不做任何修改或改编。

非常欢迎任何建议。

这些数据将从网页上的数据库中显示出来,这样如果我可以保存html标签就可以了。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用XML方法query()而不是value()来获取原始XML数据,例如:

select
    CONVERT(VARCHAR(MAX), pMetaUnitlegal.query('*:p')) legal_statement
from XMLwithOpenXML
OUTER APPLY 
    XMLData.nodes('/*:component/*:header/*:publicationMeta[@level = "unit"]/*:legalStatement') pmul(pMetaUnitlegal)

这是演示的一个工作示例:

declare @xml XML = '<p>
   This is an open access article under the terms of the 
   <url href="http://creativecommons.org/licenses/by-nc-nd/3.0/">Creative Commons Attribution‐NonCommercial‐NoDerivs</url>
   License, which permits use and distribution in any medium, provided the original work is properly cited, the use is non‐commercial and no modifications or adaptations are made.
</p>'

select CONVERT(VARCHAR(MAX), @xml.query('p'))

<强> Sqlfiddle Demo