2
A
回答
2
OK,這裏是我已經成功地放在一起的解決方案。它是用Clojure寫的,而不是Java的,但重要的位是:
- 實例化org.apache.batik.css.engine.sac.CSSConditionFactory
- 實例化org.apache.batik.css.parser.Parser
- 呼叫Parser.parseSelectors
- 呼叫org.apache.batik.dom.traversal.TraversalSupport.createNodeIterator
- 在你NodeFilter,遍歷解析SelectorList,呼籲ExtendedSelector.match
- 條件跳過冷杉t節點返回(它總是遍歷根)
(def ^:private condition-factory
(CSSConditionFactory. nil "class" nil "id"))
(defn- parse-selector [selector]
(let [parser (Parser.)]
(doto parser
(.setSelectorFactory CSSSelectorFactory/INSTANCE)
(.setConditionFactory condition-factory))
(.parseSelectors parser selector)))
(defn- matches?
([selector element] (matches? selector element ""))
([selector element pseudo]
(let [length (.getLength selector)]
(loop [i 0]
(if (< i length)
(if (.. selector (item i) (match element pseudo))
true
(recur (inc i)))
false)))))
(defn selection-seq [root selector]
(let [selector (parse-selector selector)
iterator (.createNodeIterator (TraversalSupport.)
(.getOwnerDocument root)
root
NodeFilter/SHOW_ELEMENT
(reify NodeFilter
(acceptNode [_ element]
(if (matches? selector element)
NodeFilter/FILTER_ACCEPT
NodeFilter/FILTER_REJECT)))
false)
node-seq ((fn step []
(lazy-seq
(when-let [node (.nextNode iterator)]
(cons node (step))))))]
;; Iterator always returns the reference node, so match it.
(when-let [node (first node-seq)]
(if (matches? selector (first node-seq))
node-seq
(next node-seq)))))
相關問題
- 1. Apache Batik Text Wrapped SVG
- 2. 一起使用Eclipse RCP和Apache Batik
- 3. 漸變塗料不能在Apache Batik的svggen中工作
- 4. 在AWS上的Apache Batik庫存在問題ElasticBeanstalk實例
- 5. Highchart/Easyphp/Batik
- 6. 在Servlet中使用Batik時出錯
- 7. 如何在編輯SVGDocument後重繪JSVGCanvas?使用Apache Batik
- 8. 使用vanilla W3C文檔和Apache Batik SVG光柵器
- 9. 爲什麼Apache Batik Rasterizer渲染TrueType字體不正確?
- 10. 用Apache Batik繪製一個SVG Path元素
- 11. JavaScript和querySelector
- 12. querySelector vs. querySelectorAll
- 13. 如何與querySelector()
- 14. XPath或querySelector?
- 15. 在nativescript中使用querySelector;
- 16. querySelector(),其中顯示不無
- 17. Apache Batik在某些文本中出現「&」時出現轉碼異常
- 18. iframe中的Web元素的QuerySelector
- 19. document.querySelector vs Polymer.dom(this。$)。querySelector
- 20. Backbone.Sharepoint.soap querySelector IE8問題
- 21. 獲取有關querySelector
- 22. queryselector所有用法
- 23. jQuery等價於querySelector
- 24. 如何使用querySelector
- 25. querySelector在打字稿
- 26. Angular 2 querySelector和addeventlistener
- 27. 如何裝飾JS中的querySelector/querySelectorAll
- 28. 的Javascript querySelector CDATA在XML文件中
- 29. 父類> querySelector中的子選擇器
- 30. 在Batik中應用多個AffineTransformations