2012-04-19 25 views
-2

我需要確定遊標是否在XML範圍內。 我爲範圍設置了開始和結束文本節點。 我想compareBoundaryPoints方法不適用於這種情況。當然,我可能是錯的。 在Java中,我使用com.arbortext.epic.ADocument,org.w3c.dom.ranges.Range導入。 holeRange_是一個org.w3c.dom.ranges.Range對象。可以在Java中爲Range對象設置開始和結束文本節點嗎?

holeRange_ = ((DocumentRange) txtProcessor_.GetDocument()).createRange(); 
holeRange_.setStart(startNode, 0); //text node 
holeRange_.setEndAfter(endNode); //text node 

這裏是點擊事件處理程序的主體:

Range caretRange = ((ADocument) txtProcessor_.GetDocument()).getInsertionPoint(); 
    if (caretRange != null) { 
    DebugMode.println(caretRange.getStartContainer().getNodeValue()); 
    DebugMode.println("END_TO_START = " + 
     textNodeRange_.compareBoundaryPoints(Range.END_TO_START, caretRange)); 
    DebugMode.println("START_TO_END = " + 
     holeRange_.compareBoundaryPoints(Range.START_TO_END, caretRange)); 
    } 

輸出給END_TO_START = -1和START_TO_END = -1當光標在該範圍內。 根據Check if specified element is inside selection值應爲:END_TO_START = -1和START_TO_END = 1 與之鏈接的問題: https://bugs.eclipse.org/bugs/show_bug.cgi?id=148126

+0

...任何代碼顯示,順便說一句?什麼是範圍對象? – Coffee 2012-04-19 14:09:22

+0

@JimmyGustafsson - 呃,公平地說llya有4或5個沒有答案的Q's – Coffee 2012-04-19 14:10:36

+1

@Adel - 確實如此。沒有意識到這一點。我想他仍然可以通過閱讀提供的鏈接獲益。 @伊利亞 - 這個問題很難回答它目前的狀態。請嘗試發佈你已經嘗試過的相關代碼,爲什麼它不能正常工作,更多的人可以幫助你解決問題 – 2012-04-19 14:15:09

回答

1

累的兄弟! 我已經爲從xerces C++ XML庫到Java的Range對象創建了三個方法(compareBoundaryPointsisAncestorOfindexOf)的一個小端口。我忘記了Xerces2 Java。
嗯,我做了一組實驗,結果表明xerces compareBoundaryPoints的實現更充分。

+0

注意:我必須爲該XML編輯器使用1.4 Java。我猜想compareBoundaryPoints的bug在新版本中已經被淘汰了。 – ilya 2012-04-28 10:05:26

+0

注意:如果處理非標準化的xml,'compareBoundaryPoints'工作不好。這是因爲邏輯使用'getNextSibling()'方法,它在Text節點的情況下返回null。 – ilya 2012-05-03 06:14:05

相關問題