繁体   English   中英

使用经典 ASP 在 XML 中保存 HTML

[英]Saving HTML in XML using Classic ASP

我正在为我兄弟的 web 站点开发一个非常简单的 CMS 系统。
我使用的是 Classic ASP,内容存储在 XML 文件中,我创建了一个简单的 web 表单,并使用 javascript 富文本编辑器供他编辑内容。 这意味着 HTML 代码将保存在 XML 文件中。 我相信这将始终是格式良好的 XHTML。

例如

<content>
<item id="20110611103415" sort="1" status="P">
<description><strong>18th</strong> century <span style="font-style: italic;">mahogany </span>chest of drawers</description>
</item>
</content>

当在 web 页面上显示此内容时,一切正常,只要我在 XSLT 文件中使用<xsl:copy-of select="description/node()"/> ,Z4C4AD5FCA2E7A3F74DBB1CED00381AAAA 就应该显示它。

当我尝试将这个 HTML 从表单保存回 XML 文件时,问题就来了。 我正在使用以下代码来执行此操作:

set objXML = Server.CreateObject("MSXML2.DOMDocument")
objXML.async = false
strXMLFile = server.MapPath("content.xml")
objXML.load strXMLFile

Set objRoot = objXML.documentElement

Set objItem = objRoot.SelectSingleNode("item[@id='" & strID & "']")
Set objField = objSaleItem.SelectSingleNode("description")
objField.text = Request.Form("description")
objXML.save strXMLFile

当我这样做时,我最终在我的 XML 文件中得到以下内容:

<description>&lt;strong&gt;18th&lt;/strong&gt; century &lt;span style="font-style: italic;"&gt;mahogany &lt;/span&gt;chest of drawers</description>

我已经搜索了 web 试图找出如何防止 HTML 被这样编码,但我在任何地方都找不到解决方案。

如果有人可以帮助我,我将不胜感激。

谢谢安迪

objField.text = "<.[CDATA[" & Request.Form("description") & "]]>"

它不会被编码。

我建议使用 CDATA 封装 HTML

<![CDATA[ my_html_description ]]>

所以asp代码看起来像这样:

objField.text = "<![CDATA[" & Request.Form("description") & "]]>"

即使您确信表单的结果始终是有效的 XHTML,您也应该通过将其加载到 DOM 解析器中来对其进行验证。 这将强制它有效并允许您保存并再次取出它。

set formDescriptionXML = Server.CreateObject("MSXML2.DOMDocument")

' loadXML returns a false if the XML is not valid
If Not (formDescriptionXML.loadXML (Request.Form("description"))) Then
  ' handle the load error
End If

Set objRoot = objXML.documentElement

Set objItem = objRoot.SelectSingleNode("item[@id='" & strID & "']")
Set objField = objSaleItem.SelectSingleNode("description")

objField.appendChild(formDescriptionXML.documentElement)

objXML.save strXMLFile

如果表单也只能包含文本,您可以使用If Then块处理该条件。

感谢 Cordsen 在这里为我指明了正确的方向。

我使用了您建议的解决方案并稍作修改,到目前为止它工作正常!

我发现在最终的 XML 中嵌套了越来越多的<description>标签,所以我先删除了现有的<description>节点,然后添加了新的:

    frmDescription = Request.Form("description")
    'Line breaks in the form are coming across as <br> instead of <br />'
    frmDescription = replace(frmDescription, "<br>", "<br />")

    Set formDescriptionXML = Server.CreateObject("MSXML2.DOMDocument")
    formDescriptionXML.loadXML frmDescription
    If Not formDescriptionXML Is Nothing Then
        'Remove the existing description node'
        Set objRemove = objSaleItem.SelectSingleNode("description")
        objSaleItem.removeChild objRemove
        'Create the new description node '
        objSaleItem.appendChild formDescriptionXML.documentElement
    End If

我仍然需要做一些工作来确保我总是只有一个<description>节点,但我已经解决了最糟糕的一点。

非常感谢! 安迪

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM