我正在开发一个netbeans平台应用程序,我有一个自定义的xml编辑器。 xml文档看起来与此类似(这是一个示例):
<paragraph id="1">
<sentence id="1">
<word id="1">Hello</word>
<word id="2">World</word>
<word id="3">.</word>
</sentence>
<sentence id="2">
<word id="1">This</word>
<word id="2">is</word>
<word id="3">another</word>
<word id="4">sentence</word>
<word id="5">.</word>
</sentence>
</paragraph>
<paragraph id="1">
<sentence id="1">
<word id="1">New</word>
<word id="2">Sentence</word>
<word id="3">.</word>
</sentence>
<sentence id="2">
<word id="1">Test</word>
<word id="2">two</word>
<word id="3">.</word>
</sentence>
</paragraph>
现在用户想要选择第一段的第二句。在这里,他点击第二句话的行,然后右键单击&#34;实现&#34;行动将被执行。
到目前为止,我有以下代码: 在第一个代码片段中,我获得了xml结构和完整的DomDocument。但我无法访问所选行。
private final EditorCookie context;
以下是在actionPerformed-Method:
中执行的CloneableEditorSupport editorSupport = (CloneableEditorSupport )context;
try {
InputStream inputStream = editorSupport.getInputStream();
InputSource inputSource = new InputSource(inputStream);
Document xmlDoc = XMLUtil.parse(inputSource, true, true, null, new RegisterCatalog());
NodeList nodeList = xmlDoc.getElementsByTagName("sentence");
...
在第二个代码段中,我可以访问所选行:
JEditorPane[] panes = context.getOpenedPanes();
if (panes != null) {
if (panes.length > 0) {
JEditorPane pane = panes[0];
AccessibleContext ac = pane.getAccessibleContext();
AccessibleText accessibleText = ac.getAccessibleText();
int caretPosition = accessibleText.getCaretPosition();
StyledDocument document = context.getDocument();
Element characterElement = document.getCharacterElement(caretPosition);
int start = characterElement.getStartOffset();
int end = characterElement.getEndOffset();
}
}
我得到了开始和结束位置:
<sentence id="2">
但我想要的是右键单击第二句话的行
我想得到:
<sentence id="2">
<word id="1">This</word>
<word id="2">is</word>
<word id="3">another</word>
<word id="4">sentence</word>
<word id="5">.</word>
</sentence>
是否有可能访问整个标记,包括其结束标记?另一个问题是线的可比性,因为
<sentence id="2">
我不能唯一地识别哪一个被选中,因为有两个句子的id =&#34; 2&#34;我需要区分选择哪一个。 我希望你能帮助我:)。