自定義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 Stream Writer和地圖從標籤名稱傳遞給註釋。
該代碼可以很容易地擴展到在標籤開始之前或在writeStartElement方法中執行註釋輸出之後輸出註釋。