使用Classic ASP将HTML保存为XML

| 我正在为我哥哥的网站开发一个非常简单的CMS系统。 我使用的是Classic ASP,内容存储在XML文件中,我已经创建了一个简单的Web表单,其中包含javascript富文本编辑器,供他编辑内容。这意味着将在HTML文件中保存HTML代码。我相信这将始终是格式良好的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>
当在网页上显示此内容时,一切正常,只要我在XSLT文件中使用
<xsl:copy-of select=\"description/node()\"/>
,HTML就会按原样显示。 当我尝试将此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>
我在网上搜寻了一下,试图找出如何防止HTML像这样编码,但是我找不到任何解决方案。 如果有人可以帮助我,我将非常感激。 谢谢 安迪     
已邀请:
        即使您确信表单的结果始终是有效的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
如果表单也只能包含文本,则可以使用“ 5”块处理该情况。     
        我建议使用CDATA封装HTML
<![CDATA[ my_html_description ]]>
因此,asp代码如下所示:
objField.text = \"<![CDATA[\" & Request.Form(\"description\") & \"]]>\"
    
        objField.text = \“ <![CDATA [\”&Request.Form(\“ description \”)&\“]]> \” 它不会被编码。     
        感谢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>
节点,但是我已经解决了最坏的问题。 非常感谢! 安迪     

要回复问题请先登录注册