カスタムXMLストリームライターはそれを行うことができます。
たとえば、次のXMLストリームライターは、特定のタグの終了後にコメントを追加します。(この例では、別の作家をチェーンできますDelegatingXMLStreamWriterを利用します:https://github.com/apache/cxf/blob/master/core/src/main/java/org/apache/cxf/staxutils/DelegatingXMLStreamWriter.java)を
public class CommentingXMLStreamWriter extends DelegatingXMLStreamWriter
{
private final Deque<String> stack = new ArrayDeque<>();
private final Map<String, String> afterEndElementComments;
public CommentingXMLStreamWriter(
final XMLStreamWriter writer,
final Map<String, String> afterEndElementComments)
{
super(writer);
this.afterEndElementComments = afterEndElementComments;
}
@Override
public void writeStartElement(String localName) throws XMLStreamException
{
super.writeStartElement(localName);
stack.addFirst(localName);
}
@Override
public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException
{
super.writeStartElement(namespaceURI, localName);
stack.addFirst(localName);
}
@Override
public void writeStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException
{
super.writeStartElement(prefix, localName, namespaceURI);
stack.addFirst(localName);
}
@Override
public void writeEndElement() throws XMLStreamException
{
super.writeEndElement();
final String localName = stack.pollFirst();
if (localName == null)
return;
final String comment = afterEndElementComments.get(localName);
if (comment == null)
return;
super.writeComment(comment);
}
}
により、このクラスのインスタンスを作成します。既存のXMLストリームライタとタグをタグ名からコメントに渡します。
コードを簡単に拡張して、タグの開始前にコメントを出力したり、writeStartElementメソッドでコメント出力を行ったりすることができます。