【问题标题】:How can I avoid encoding when using "FOR XML PATH"?使用“FOR XML PATH”时如何避免编码?
【发布时间】:2017-03-10 18:38:36
【问题描述】:

使用FOR XML PATH 编码我的HTML 使我的超链接无用。我看到others 正在使用value 方法来防止编码。但是,这去掉了我需要的表结构。我可以进行搜索替换,有效地解码 html。这似乎不是正确的方法。

此查询中的公司列是问题子项:

DECLARE @tableHTML NVARCHAR(MAX)
DECLARE @subj VARCHAR(255)
    
SET @tableHTML =
    N'<style type="text/css">' +
    N'table, td {border-collapse: collapse; vertical-align: top; text-align: left;font-family: Calibri; font-size: 12px;}' +
    N'th {vertical-align: middle; text-align: left;border-bottom-style: solid; border-bottom-width: 0px; border-bottom-color: #CCCCCC; background-color: #000000; color: #FFFFFF;}' +
    N'td {border-bottom-style: solid; border-bottom-width: 0px; border-bottom-color: #CCCCCC}' +
    N'</style>' +

    N'<h3 style="font-family: Calibri">Contacts:</h3>' +

    N'<table id="bodyTable" cellpadding="5" cellspacing="5" style="border: 1px solid #C0C0C0; vertical-align: top; text-align: left; height: 100%; width: 700;">' +
    N'  <tr>' +
    N'      <th>ContactID</th>' +
    N'      <th>FullName</th>' +
    N'      <th>Salutation</th>' +
    N'      <th>Company</th>' +
    N'      <th>Email</th>' +
    N'  </tr>' +

    CAST((
            SELECT td = nContactID, ''
                , td = FullName, ''
                , td = Salutation, ''
                , td = N'<a href="' + Website + '">' + Company + N'</a>', ''
                , td = Email, ''
            FROM vContact
            WHERE LastName = 'Jetson'

            FOR XML PATH('tr'), TYPE 
        ) AS NVARCHAR(MAX)) +
    N'          </table>'
                                
    PRINT @tableHTML 

【问题讨论】:

    标签: sql-server xml tsql xhtml for-xml


    【解决方案1】:

    重点是:XML 不是带有一些额外字符的文本!

    XML 中的文本 不得带有标记所需的字符,尤其是邪恶的三个字符:&lt;&gt;&amp;。您没有将 XML 添加到您的输出中,而是一个字符串,看起来 像 XML。引擎做了必须做的事情:这个字符串被编码了。

    解决方法:您必须交出 XML 而不是字符串。

    尝试替换此行

    , td = N'<a href="' + Website + '">' + Company + N'</a>', ''
    

    有了这个

    ,td = (SELECT Website AS [a/@href],Company AS a FOR XML PATH(''),TYPE)
    

    更新

    不知道这是否对您有帮助,但here 您会找到一个通用函数,该函数将直接从SELECT 语句创建一个带有标题和正文的 XHTML 表。

    【讨论】:

    • 正是我需要的。谢谢你。我在哪里可以找到有关使用[a/@href] 的更多信息?我想知道还有什么其他的转义标签可用。
    • @SpencerWilliamson 抱歉,之前没有看到这个。 You find more information here 只需点击链接...
    【解决方案2】:
    ...FOR XML PATH(''),TYPE).value('.', 'VARCHAR(MAX)'),1,1,'')
    

    .value('.', 'varchar(max)') 在很多情况下都很有用。

    【讨论】:

      猜你喜欢
      • 2013-03-16
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 2016-08-09
      • 2022-10-31
      相关资源
      最近更新 更多