-2

カーソルが XML 範囲内にあるかどうかを判断する必要があります。Range の開始テキスト ノードと終了テキスト ノードを設定しました。この場合、compareBoundaryPoints メソッドは正しく機能しないと思います。確かに、私は間違っている可能性があります。Java ではcom.arbortext.epic.ADocumentorg.w3c.dom.ranges.Rangeインポートを使用します。 holeRange_org.w3c.dom.ranges.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 である必要があります

4

1 に答える 1

1

疲れた兄弟!xerces c++ XML ライブラリから Java への Range オブジェクトのトリプル メソッド ( compareBoundaryPointsisAncestorOf、 )の小さなポートを作成しました。indexOfXerces2 Java のことを忘れていました。
さて、私は一連の実験を行い、xerces のcompareBoundaryPoints実装がより適切であることを示しました。

于 2012-04-28T10:02:01.060 に答える