[英]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.