簡體   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