0

我有一个富文本编辑器,可以将我的标记保存到数据库中。我有一个使用 XML Auto 带回该数据的存储过程。问题,您可能已经猜到了,XML Auto 对我的标记进行编码,因此富文本不会显示在我的网页显示上。仅显示标记文字。

我可以在 XML Auto 中做些什么来防止某些字段被编码?欢迎其他想法。

XML

    <xsl:template match="@* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

XSL

<?xml version="1.0" encoding="utf-8"?>
<catalog>
  <cd>
    <album>Thriller</album>
    <artist>Michael Jackson</artist>
    <notes>&lt;strong&gt;test&lt;/strong&gt;</notes>
  </cd>
  <cd>
    <album>Album2</album>
    <artist>Artist2</artist>
    <notes>Can be plain text as well.</notes>
  </cd>
</catalog>

c# XSLT

        string xmlFile = @"XMLFile.xml"; //<view>html column</view>
        string xslFile = @"XSLTFile.xslt"; //views.xsl file
        string xmlFilePath = Request.PhysicalApplicationPath + xmlFile;
        string xsltPath = Request.PhysicalApplicationPath + xslFile;

        XPathDocument xPathDoc = new XPathDocument(xmlFilePath);
        XslCompiledTransform transform = new XslCompiledTransform();
        transform.Load(xsltPath);
        transform.Transform(xPathDoc, null, Response.Output);
4

1 回答 1

2

带有未压缩 保留字符的“XML”是非法的。所以不可能有这样的 XML,<root>a&b</root>因为&char 是保留的。解决方案是在使用前对字符串进行解码:

DECLARE @x XML;
SET @x = (SELECT 'a&b' AS Col FOR XML RAW)

SELECT @x AS StringEncoded
SELECT @x.value('(/row/@Col)[1]', 'NVARCHAR(50)') AS StringDecoded

结果:

StringEncoded
---------------------
<row Col="a&amp;b" />

StringDecoded
---------------------
a&b

第二个例子:

DECLARE @x2 XML;
SET @x2 = (SELECT '<strong>test</strong>' AS Col FOR XML RAW)

SELECT @x2 AS StringEncoded2
SELECT @x2.value('(/row/@Col)[1]', 'NVARCHAR(50)') AS StringDecoded2

结果:

StringEncoded2
-----------------------------------------------
<row Col="&lt;strong&gt;test&lt;/strong&gt;" />

(1 row(s) affected)

StringDecoded2
-----------------------------------------------
<strong>test</strong>
于 2013-04-09T15:27:43.167 回答