我正在开发一个程序,我在其中接收XML文件作为InputStream。我必须进行一些更改,然后将其作为OutputStream返回。
这是我的代码:
public void execute (InputStream xmlEntrada, OutputStream xmlSalida) {
SAXBuilder saxBuilder = new SAXBuilder();
Document document;
String idDocCobro, idCobro;
String sociedad, ejercicio, numDocCobro;
try {
document = saxBuilder.build(xmlEntrada);
Element raiz = document.getRootElement();
List piDocCobros = raiz.getChildren("Pagos");
for (int i = 0; i < piDocCobros.size(); i++) {
Element nodePiDocCobros = (Element) piDocCobros.get(i);
sociedad = nodePiDocCobros.getChildText("Sociedad");
ejercicio = nodePiDocCobros.getChildText("Ejercicio");
numDocCobro = nodePiDocCobros.getChildText("NumDocumentoCobro");
idDocCobro = sociedad + ejercicio + numDocCobro + System.currentTimeMillis();
nodePiDocCobros.getChild("iddoccobro").setText(idDocCobro);
List piCobros = nodePiDocCobros.getChildren("Pago");
for (int y = 0; y < piCobros.size(); y++) {
Element nodePiCobros = (Element) piCobros.get(y);
nodePiCobros.getChild("iddoccobro").setText(idDocCobro);
idCobro = numDocCobro + System.currentTimeMillis();
nodePiCobros.getChild("idcobro").setText(idCobro);
List piDocumentosRel = nodePiCobros.getChild("DocumentosRelacionados").getChildren("DocumentoRelacionado");
for (int z = 0; z < piDocumentosRel.size(); z++) {
Element nodePiDocumentosRel = (Element) piDocumentosRel.get(z);
nodePiDocumentosRel.getChild("idcobro").setText(idCobro);
}
}
}
copy(xmlEntrada, xmlSalida);
} catch (JDOMException | IOException e) {
System.out.println(e.toString());
}
}
public static void copy(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead == -1){
break;
}
out.write(buffer, 0, bytesRead);
}
}
我的问题是当我尝试读取函数copy
中的XML时,因为该流已经关闭,所以出现异常。当我在程序开始时使用saxBuilder.build
语句时,流将自行关闭。我之前无法将文本保存在byte[]
变量中,因为我将在程序执行过程中对其进行修改。
有什么主意吗?
非常感谢您! :)
答案 0 :(得分:2)
您读取的InputStream不是包含您所做的修改的对象。您所做的修改在Document对象内部。
这就是您需要发送到OutputStream的内容。
答案 1 :(得分:0)
正如你们中的一些人告诉我的那样,我犯了一个愚蠢的错误。我要做的就是将文档传递给OutputStream。我是用下一段代码做到的:
XMLOutputter xmlcode = new XMLOutputter();
xmlcode.output(document, xmlSalida);
感谢您的帮助!