Nee*_*rma 2 html xml sql t-sql sql-server
我正在从存储过程生成 html,但它将 html 标签编码为“<”、“>”或“&”。我在生成标签时需要标签。我已经尝试过 [CDATA] 但没有得到我预期的结果。
select '<ul class=''downloaditems-grid''>'+(
select stuff(
(
select '<li>'+ convert(nvarchar(max),Filepath) +'</li>'
from(
select ('<p>'+UploadDocumentName+'</p><a target=''_blank'' class=''ml10'' href='''+DocumentFilePath+'''title=''Download''>') As Filepath from table1 CLRD
where
isnull(CLRD.IsDeleted,0) <> 1 and orderid=2
)
as T for xml path('')),1,2,'')) +' </ul>' a
Run Code Online (Sandbox Code Playgroud)
它返回
<ul class='downloaditems-grid'>t;li><P>bill.png</><a target='_blank' class='ml10' href='2c0a7c0c-d228-4f5d-9a8f-eb32911509db.png'title='Download'></li> </ul>
Run Code Online (Sandbox Code Playgroud)
但我的要求是:
<ul class='downloaditems-grid'>
<li><p>bill.png</p>
<a target='_blank' class='ml10' href='2c0a7c0c-d228-4f5d-9a8f-eb32911509db.png' title='Download'>
</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
表结构
除了在创建 html 标签时使用替换我在那里解码的方式之外,任何人都可以给出一些提示吗?
从几个角度来看,您“生成的”XML 是无效的...
使用 SQL Server,您可以轻松创建有效的XHTML,如下所示:
SELECT 'downloaditems-grid' AS [@class]
,'bill.png' AS [li/p]
,'_blank' AS [li/a/@target]
,'ml10' AS [li/a/@class]
,'2c0a7c0c-d228-4f5d-9a8f-eb32911509db.png' AS [li/a/@href]
,'Download' AS [li/a/@title]
FOR XML PATH('ul')
Run Code Online (Sandbox Code Playgroud)
结果(似乎与您尝试的结果非常相似
<ul class="downloaditems-grid">
<li>
<p>bill.png</p>
<a target="_blank" class="ml10" href="2c0a7c0c-d228-4f5d-9a8f-eb32911509db.png" title="Download" />
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
并意识到一个HTML是肮脏和与 XHTML 完全不同。
在XML有标记和属性名称和内容之间的清晰分离。出于明确的原因,绝对禁止某些字符(<, > and &并且许多特殊字符与字符串编码结合会导致意外结果。标签和属性有明确记录的限制。内容可以是任何内容,但是:内容永远需要正确转义,因此,您的禁用字符被转换为 xml 实体
CDATA不会帮助你,因为它不支持FOR XML PATH(虽然有EXPLICIT......),无论如何CDATA,即使它有效......也不会解决你的问题......
从许多角度来看,您连接的 xml 字符串都是无效的(例如</>或缺少空白...)
这是将其与表数据一起使用的代码。请注意,我在第 3 行添加了禁用字符!
DECLARE @tbl TABLE(DocumentFilePath VARCHAR(100),UploadDocumentName VARCHAR(100));
INSERT INTO @tbl VALUES
('File1.png','This is file 1')
,('File2.png','This is file 2')
,('File&3.png','This is file 3& with forbidden <>!!')
SELECT 'downloaditems-grid' AS [@class]
,(
SELECT
'bill.png' AS [p]
,'_blank' AS [a/@target]
,'ml10' AS [a/@class]
,tbl.DocumentFilePath AS [a/@href]
,tbl.UploadDocumentName AS [a/@title]
FROM @tbl AS tbl
FOR XML PATH('li'),TYPE
)
FOR XML PATH('ul')
Run Code Online (Sandbox Code Playgroud)
这是结果
<ul class="downloaditems-grid">
<li>
<p>bill.png</p>
<a target="_blank" class="ml10" href="File1.png" title="This is file 1" />
</li>
<li>
<p>bill.png</p>
<a target="_blank" class="ml10" href="File2.png" title="This is file 2" />
</li>
<li>
<p>bill.png</p>
<a target="_blank" class="ml10" href="File&3.png" title="This is file 3& with forbidden <>!!" />
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)