在netbeans平台编辑器cookie中获取选定的xml标记

时间:2014-09-27 13:22:05

标签: java xml cookies netbeans netbeans-platform

我正在开发一个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;我需要区分选择哪一个。 我希望你能帮助我:)。

0 个答案:

没有答案