。xml文本解析。

本文介绍了一种使用Java通过SFTP协议读取远程服务器上的文件并进行解析处理的方法。主要内容包括:建立SFTP连接、获取指定路径下的文件列表、逐个读取特定格式的文件(.trans)并解析其内容、将解析后的数据转换成结构化的形式并存储到数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SshClient client=new SshClient();//创建ssh类
opclient = YyzjUtil.connectSsh(client,zzbm);//连接sftp
String transPath = this.getFilepath(20002,zzbm,lysj);//trans文件存放地址
map.clear();
filelist.clear();
this.getsSfiles(transPath);//获取 文件列表按文件路径存入map
try {
sftp = new SftpSubsystemClient();
boolean flag0 = client.openChannel(sftp);
boolean flag1 = sftp.startSubsystem();
if (!flag0||!flag1) {
throw new CsgSoapFault("SERVER", "读取文件客户端打开失败!", "", "");
}
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

StringBuffer sb = new StringBuffer("");
//SftpClient scp = client.openSftpClient();

T_FW_TRANSJXJG trans = null;
BufferedReader reader = null;
for (String filepath :filelist){
if (filepath.contains(".trans")) {
try {
//String filepath="/home/voiceDir/trans/upload/20170520/00/008/D0000820170410164125.trans";
System.out.print(filepath);
       SftpFile inf = sftp.openFile(filepath, R);
SftpFileInputStream sftpinputstream = new SftpFileInputStream(inf);
InputStreamReader isr = new InputStreamReader(sftpinputstream, "UTF-8");
reader = new BufferedReader(isr);
String tempString = null;
// int line = 1;// 行号
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
sb.append(tempString);
}
T_FW_ASRJKZXJG t = new T_FW_ASRJKZXJG();
t.setYywjmc(filepath.substring(filepath.lastIndexOf("/")+1).replace(".trans", ".wav"));
reader.close();
// 增加生成文本的方法 给TA用
List<Map<String, String>> mapList = SoapUtil.analyseByParentElementPlus(sb.toString(),"sentence","role","AGENT");
StringBuffer sbtxt = new StringBuffer("");
sbtxt.append("[");
for (Map<String, String> i : mapList) {
sbtxt.append("\"" + i.get("text") + "\",");
}
if (sbtxt.toString().length() > 1) {
sbtxt.deleteCharAt(sbtxt.length() - 1);
}
sbtxt.append("]");
byte[] strByte = sbtxt.toString().getBytes("GBK");
String stgbk = new String(strByte,"GBK");
if(stgbk.length()>4000){
t.setQbyywb2(stgbk.substring(4000));
t.setQbyywb1(stgbk.substring(2000,4000));
t.setQbyywb(stgbk.substring(0,2000));
}
if(stgbk.length()>2000&&stgbk.length()<=4000){
t.setQbyywb1(stgbk.substring(2000));
t.setQbyywb(stgbk.substring(0,2000));
}
if(stgbk.length()<=2000){
  t.setQbyywb(stgbk);
}
// 调用服务将xml全部存入数据库
ServiceRequest req = new ServiceRequest();
req.addParam("IN_FW_ASRJKZXJG", t);
req.addParam("IN_FW_LOB", sb.toString());
RemoteServiceUtil.call("WBJC.TYFWPT.XZASRJKZXJG", req);


// 保存结构化后的xml到数据库
List<Map<String, String>> transMapList = SoapUtil.analyseByElementAttributes(sb.toString(),"sentence");
List<Map<String, String>> silenceMapList = SoapUtil.analyseByElementAttributes(sb.toString(),"silence_list");
List<Map<String, String>> textMapList = SoapUtil.analyseByParentElementPlus(sb.toString(),"sentence");


List<T_FW_TRANSJXJG> tranList = new ArrayList<T_FW_TRANSJXJG>();
for (int i = 0; i < transMapList.size(); i++) {
trans = new T_FW_TRANSJXJG();
trans.setYywjmc(t.getYywjmc());
trans.setYyzsc(SoapUtil.analyseByElement(sb.toString(), "duration"));
trans.setJyzsc(silenceMapList.get(0).get("total_time"));
trans.setDhjs(transMapList.get(i).get("index"));
trans.setDhkssj(transMapList.get(i).get("start"));
trans.setDhjssj(transMapList.get(i).get("end"));
trans.setKxd(transMapList.get(i).get("score"));
trans.setYs(transMapList.get(i).get("speed"));
trans.setJs(transMapList.get(i).get("role"));
trans.setDhnr(textMapList.get(i).get("text"));
tranList.add(trans);
}
// 调用服务将结构化数据全部存入数据库
ServiceRequest transreq = new ServiceRequest();
transreq.addParam("IN_FW_TRANSJXJG", tranList);
RemoteServiceUtil.call("WBJC.TYFWPT.XZTRANSJXJG", transreq);


sbtxt.setLength(0);
sb.setLength(0);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}
}
client.disconnect();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值