繁体   English   中英

MSXML XHTML和嵌入式CSS

[英]MSXML XHTML and embedded CSS

我有一个Excel工作簿,用作在内部系统中生成用户可填写的表单的起点。 作为创建这些工作簿的用户的助手,我正在尝试添加一个预览功能,该功能使用该电子表格,执行一些VBA魔术以生成HTML文件,然后在其浏览器中显示该文件。

我已经完成了基本结构,使用MSXML编写了XHTML,到目前为止,一切都很好。 现在,我遇到了嵌入样式表的问题。

样式表包含在VBA代码的字符串中,我试图将其添加到标题的<style>标记中,这很简单。 我遇到问题的地方是我在样式表中使用CSS选择器,而>引起了我的问题,因为MSXML希望将其编码为XML转义序列,从而破坏CSS。 我试过在CDATA块中添加样式表,但是浏览器只是忽略了它。

tl; dr:如何将包含>的样式表嵌入到由MSXML生成的HTML文件中?

编辑:这是一个代码块,重现此行为。 将其放入您选择的Excel中的Sub或使用VBA的程序中,运行它并查看源代码:

Dim doc As DOMDocument
Dim htmlRoot As IXMLDOMElement
Dim bodyRoot As IXMLDOMElement
Dim headRoot As IXMLDOMElement
Dim style As IXMLDOMElement

Set doc = New DOMDocument
Set htmlRoot = doc.createElement("html")
Set bodyRoot = doc.createElement("body")
Set headRoot = doc.createElement("head")

Set style = doc.createElement("style")
style.appendChild doc.createTextNode(".section>.title{font-weight: bold;}")
style.setAttribute "type", "text/css"

headRoot.appendChild style

htmlRoot.appendChild headRoot
htmlRoot.appendChild bodyRoot

doc.appendChild htmlRoot

Dim fs As FileSystemObject
Dim sh
Dim tempFolder As String
Set fs = New FileSystemObject
Set sh = CreateObject("WScript.Shell")
tempFolder = fs.GetSpecialFolder(TemporaryFolder)

Dim fileName As String
fileName = tempFolder + "\preview.html"
doc.Save fileName
sh.Run fileName

也许不用尝试存储将被解释为XML标记的CSS字符,而是可以使用现有方法来生成XHTML,而不是使用MSXML插入CSS,而是插入一个占位符,并在完成XHTML构建后替换它。 像这样:

style.appendChild doc.createTextNode("{css}")

' some more XHTML building here.

Dim html As String
Dim css As String

css = ".section>.title{font-weight: bold;}"
html = Replace(doc.Text, "{css}", css)

' Save the html here...

这样,您可以在XHTL中嵌入任何内容,而不必担心MSXML试图为您转义它。

>的XML转义序列是&gt; (表示大于)

暂无
暂无

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

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