refactor(ContextBlock): return dom nodes directly

This commit is contained in:
2026-03-10 14:48:14 +08:00
parent 1cd6ba11bb
commit f5f64971f3
2 changed files with 4 additions and 18 deletions

View File

@@ -22,9 +22,7 @@ import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
@@ -166,8 +164,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
contextBlocks.stream()
.sorted(Comparator.comparingInt(ContextBlock::getPriority))
.map(ContextBlock::encodeToXml)
.forEach(blockXml -> {
Element blockElement = parseElement(blockXml);
.forEach(blockElement -> {
root.appendChild(document.importNode(blockElement, true));
});
@@ -236,17 +233,6 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
parent.appendChild(element);
}
private Element parseElement(String xml) {
try {
Document parsedDocument = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
return parsedDocument.getDocumentElement();
} catch (Exception e) {
throw new IllegalStateException("解析 ContextBlock XML 失败", e);
}
}
private void appendSupplyBlocks(Document document, Element inputRoot, List<ContextBlock> contextBlocks) {
Map<String, List<ContextBlock>> groupedBlocks = filterContextBlocks(contextBlocks, ContextBlock.Type.SUPPLY).stream()
.collect(Collectors.groupingBy(
@@ -259,7 +245,7 @@ public class CommunicationProducer extends AbstractAgentModule.Running<PartnerRu
Element groupElement = document.createElement(entry.getKey());
inputRoot.appendChild(groupElement);
for (ContextBlock block : entry.getValue()) {
Element blockElement = parseElement(block.encodeToXml());
Element blockElement = block.encodeToXml();
groupElement.appendChild(document.importNode(blockElement, true));
}
}

View File

@@ -22,7 +22,7 @@ abstract class ContextBlock {
SUPPLY
}
fun encodeToXml(): String {
fun encodeToXml(): Element {
val document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.newDocument()
@@ -33,7 +33,7 @@ abstract class ContextBlock {
fillXml(document, root)
return document.toXmlString()
return root
}
protected abstract fun fillXml(document: Document, root: Element)