0

いくつかのタイプのデータソースがあり、それらを追加のXML検証とオートコンプリートの提供に使用したいと思います(可能な場合はEclipseを使用)。

このソースは、(別のファイルまたは同じファイルからの)他の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ファイルの検証(間違ったタイプ/値に下線を付け、可能であればPackage Explに赤いxを表示します)。
  • コード補完の提供 (提案TypeAおよびTypeB入力時type="

私は確かにいくつかのコードを書かなければなりませんが、始めるための最良の方法は何ですか?

  • 標準のXMLエディターを拡張できますか?
  • 役立つプラグインはありますか?(たぶんRinzo XMLエディター?)
  • 私が考えていなかった他のオプションはありますか?
4

4 に答える 4

0

私は、Eclipseがすでにこれらの両方を行っていると確信していますが、それらは拡張パッケージの1つに含まれています。Java EE 開発者向けの Eclipse をダウンロードしてみてください。検証と完了は Web Tools Platform の一部であると確信しています。

XML の検証については、こちらをご覧ください

于 2012-05-23T12:12:16.157 に答える
0

ファイルのXSDスキーマを記述して、それらを検証できます。XMLEclipse

確かに、クラスXSDからスキーマを生成するフレームワークがあります。Java

ここで答えを確認してください: Javaクラスからxsdを生成するユーティリティ

于 2012-05-23T12:27:51.897 に答える
0

Rinzo を拡張することにした場合は、カスタマイズしたい同じ機能を拡張する方法についてのドキュメントが更新されているようです :)

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

于 2012-05-28T17:09:18.913 に答える
0

ピーター、

コメントに十分なスペースがなかったので、新しい投稿でお返事します。

あなたの例に従って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));
        }
    }
}

}

これは Rinzo の API と対話する限りであり、外部 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のソース コードも表示されます。

自由な世界でロックし続けよう!:)

于 2012-05-30T21:03:17.223 に答える