2012-05-23 4 views
0

У меня есть несколько типов источников данных, которые я хотел бы использовать для дополнительной проверки XML и обеспечения автозавершения (используя Eclipse, если это возможно).Расширение проверки подлинности/автозавершения XML

Этот источник может быть какой-то другой XML (от другого или того же файла):

<type name="TypeA"/> 
<type name="TypeB"/> 

или Java-класс

public List<String> getValues() { 
    return Arrays.asList("Val1", "Val2", "Val3"); 
} 

Эти значения затем ссылаются в другой XML -файлы:

<x type="TypeA" value="Val2" /> 
<x type="TypeB" value="Val3" /> 

Теперь я хотел бы улучшить редактирования этого файла с помощью

  • Проверки в XML-файле (подчеркивание неправильных типов/значения, если возможно, дисплей красный й в пакете Обосны.)
  • Обеспечение code- завершение (предложить TypeA и TypeB при вводе type=")

Мне обязательно нужно написать код, но как лучше всего начать?

  • Можно ли расширить стандартный XML-редактор?
  • Есть ли какие-нибудь плагины, которые могут вам помочь? (Может быть Rinzo XML Editor?)
  • Любые другие варианты, о которых я не думал?

ответ

0

Я уверен, что eclipse уже выполняет обе эти вещи, но они являются частью одного из расширенных пакетов. Попробуйте загрузить eclipse для разработчиков Java EE. Я уверен, что проверка и дополнение являются частью платформы веб-инструментов.

Проверка Here для проверки XML

+0

Спасибо, но я не говорю о проверке правильных и хорошо сформированных XML-файлов, но о дополнительных проверках, которые Eclipse не может знать. –

0

Вы можете написать XSD схемы для ваших XML файлов, то Eclipse может проверить их.

Есть, конечно, рамки, которые генерируют XSD схемы из ваших классов Java.

Проверить ответы здесь: utility to generate xsd from java class

+0

Спасибо, это интересная идея! Если возможно, я бы хотел избежать повторного генерации моего xsd всякий раз, когда исходные файлы меняются. –

+0

Я знаю http://sourceforge.net/projects/jaxb-builder/ для генерации другого пути Java-> XSD – adranale

+0

@PeterLang Если вы нашли фреймворк, который использует Maven, вы можете позволить генерации произойти во время 'Maven 'build, но это не поможет вам для завершения кода. – adranale

0

Если вы решите расширение Rinzo, это кажется документация пчела обновляется, как расширить ту же функцию вы хотели бы настроить :)

http://editorxml.sourceforge.net/extendingRinzo.html

+0

Спасибо, я уже это видел. Есть ли у вас опыт использования Rinzo? –

0

Peter,

Я отвечаю вам в новом посте, так как мне не хватает места в комментарии.

Если вы хотите расширить Rinzo в соответствии с вашим примером, я думаю, вам нужно будет создать плагин, вносящий точки расширения, указанные в документации на сайт.

Для реализации помощника содержание Я думаю приблизительную реализацию на основе ваших примеров можно было бы следующим образом:

public class CustomSourceAssistProcessor implements IXMLContentAssistProcessor { 
@Override 
public void addAttributeValuesProposals(XMLNode currentNode, String attributeName, String prefix, 
     ITextViewer viewer, int offset, Collection<ICompletionProposal> results) { 
    if("x".equals(currentNode.getTagName()) && "type".equals(attributeName)) { 
     for (String possibleValue : this.getPossibleValuesFromXML()) { 
      results.add(new CompletionProposal(possibleValue, offset, prefix.length(), 0, null, "Proposal Description...", null, null)); 
     } 
    } 
    if("x".equals(currentNode.getTagName()) && "value".equals(attributeName)) { 
     for (String possibleValue : this.getPossibleValuesFromJavaClass()) { 
      results.add(new CompletionProposal(possibleValue, offset, prefix.length(), 0, null, "Proposal Description...", null, null)); 
     } 
    } 
} 

}

Это, насколько взаимодействия с API Rinzo, и ваша конкретная логика сбора значения либо из внешнего файла XML или Java-класса должны быть реализованы в методах getPossibleValuesFromXML() и getPossibleValuesFromJavaClass()

С другой стороны, для того, чтобы добавить свой собственный валидатор я думаю грубую реализацию вашей точки расширения, также основанный на вашем примере, должен быть похож на этот один:

public class CustomSourceXMLValidator implements XmlValidator { 
@Override 
public void validate(RinzoXMLEditor editor) { 
    editor.getModel().getTree().accept(new HierarchicalVisitor() { 
     @Override 
     public boolean visitStart(XMLNode node) { 
      if(node.isTag() && "x".equals(node.getTagName())) { 
       for (Entry<String, XMLAttribute> entry : node.getAttributes().entrySet()) { 
        if("type".equals(entry.getKey())) { 
         this.validateValueFromXML(entry.getValue().getValue()); 
        } 
        if("value".equals(entry.getKey())) { 
         this.valdateValueFromJavaClass(entry.getValue().getValue()); 
        } 
       } 
      } 
      return true; 
     } 
     private void valdateValueFromJavaClass(XMLAttribute xmlAttribute) { 
      if(!this.getPossibleValuesFromXML().contains(xmlAttribute.getValue())) { 
       this.createMarker(editor, xmlAttribute); 
      } 
     } 
     private void validateValueFromXML(XMLAttribute xmlAttribute) { 
      if(!this.getPossibleValuesFromJavaClass().contains(xmlAttribute.getValue())) { 
       this.createMarker(editor, xmlAttribute); 
      } 
     } 
    }); 
} 

}

И однажды опять же вам решать внедрение методов getPossibleValuesFromXML() и getPossibleValuesFromJavaClass(). Вы также можете увидеть исходный код ClassNamesValidatorVisitor в качестве примера.

Продолжайте кататься в свободном мире! :)

+0

Я просто хотел узнать, есть ли у вас опыт, но спасибо за образцы! ;-) Вы использовали Rinzo? BWT: вместо добавления нового ответа метод StackOverflow должен был отредактировать существующий ответ. –

Смежные вопросы