我的HTML代碼解析爲org.w3c.dom.Document
。我需要檢查所有標記style
屬性,解析它們,更改一些CSS屬性並將修改後的樣式定義返回到屬性。使用Java解析HTML「樣式」屬性
是否有任何標準的方法來解析style
屬性?我如何使用org.w3c.dom.css
包中的類和接口?
我需要一個Java解決方案。
我的HTML代碼解析爲org.w3c.dom.Document
。我需要檢查所有標記style
屬性,解析它們,更改一些CSS屬性並將修改後的樣式定義返回到屬性。使用Java解析HTML「樣式」屬性
是否有任何標準的方法來解析style
屬性?我如何使用org.w3c.dom.css
包中的類和接口?
我需要一個Java解決方案。
首先,我會查看javax.xml
包中的課程。 javax.xml.parsers
包中包含兩種解析風格的解析器:SAXParser和DocumentBuilder。這聽起來像是你想讓DocumentBuilder創建一個DOM。您可以手動遍歷DOM(緩慢且痛苦),也可以使用XPath標準在DOM中查找元素。 Java的支持在javax.xml.xpath
。
XPathExpression xpath = XPath.compile("//@style");
Object results = xpath.evaluate(dom, XPathConstants.NODESET);
這是你的責任將結果投到NodeList並正確迭代,但它的最直接的方式來得到你想要的。查看Java的DOM API以獲取更多關於讀取和更改值的信息。
我不相信這是對內置Java中的CSS解析器任何支持,但你可以看看這些項目:
,可以幫助您與你的目標。注意:Batik CSS解析器已被納入較大的Apache Batik項目中:http://xmlgraphics.apache.org/batik/index.html可能比您需要的要多,但這是一個企業友好的許可證。
HTML已被解析,我也知道如何收集樣式屬性。現在我必須解析這些樣式屬性的內容。即將CSS定義的字符串轉換爲鍵值對或類似的集合。 – Andrey 2010-11-23 13:54:47
你看過我指出的CSS解析器項目嗎?沒有用於解析CSS的javax。*包。這個可憐的人的方法是正則表達式,對於CSS來說工作正常 - 但這不是你想要的。 – 2010-11-23 14:31:11
感謝您的圖書館鏈接。 css.sac打算解析CSS樣式表。 cssparser根本沒有文檔,甚至是簡單的操作方法。蠟染似乎對我的任務來說太複雜了。 – Andrey 2010-11-23 15:18:08
我不知道我完全理解你的要求,但基本上,你必須:
它看起來像你會使用CSSStyleSheet接口從sytlesheet(s)中提取CSS規則。
如果你想辦法做到這一點沒有任何依賴關係,你可以使用javax.swing.text.html
包中的類,讓你最那裏的方式:
import javax.swing.text.html.*;
StyleSheet styleSheet = new StyleSheet()
AttributeSet dec = ss.getDeclaration("margin:2px;padding:3px");
Object marginLeft = dec.getAttribute(CSS.Attribute.MARGIN_LEFT);
String marginLeftString = marginLeft.toString(); // "2px"
這會返回一個StyleSheet.CssValue
,這是不幸的是沒有公開。因此需要將其轉換爲字符串。此外,它不會處理em
單位。不過,這對於各種風格來說都很明智。不理想,但避免依賴。
+1不表示正則表達式。這就是10個新生物中有9個首先要求的,我們都知道,這是不能做到的。 – 2010-11-23 13:19:09