java的socke client端接收xml报文的问题

java的socke client端接收xml报文的问题,第1张

一次性读取是不可靠的,一般是定义一个字节数组,用一个循环读取。然后再把读到的数据加起来。主要代码:

InputStream in=null;//你的socket对应的接收流

ByteArrayOutputStream bo=new ByteArrayOutputStream();//用来暂时存放接收到的数据的字节数组流

byte b[]=new byte[100];

int length=0;

while((length=inread(b))!=-1)

{

bowrite(b,0,length);

}

byte ba[]=botoByteArray();

Systemoutprintln(new String(ba));//这里要注意编码,根据实际情况有所变化,不然可能会有乱码

boclose();

inclose();

可以通过元素中的getText方法获取到节点的内容。

举例:

SAXReader sax = new SAXReader();

Document document = saxread(reader);//reader为定义的一个字符串,可以转换为xml

Element root = documentgetRootElement();//获取到根节点元素String str = root getText()//获取到节点的内容

用到的是dom4j-161jar,需要引入的包是:

import orgdom4jDocument;

import orgdom4jDocumentException;

import orgdom4jElement;

import orgdom4jioSAXReader;

备注:如果是多个子节点可以通过”Element xx=root element("code")“获取到子节点的元素,前提是需要知道子节点的名称。

你这个格式真不像是xml格式的文件

xml格式的文件一般都是

树状带节点的形如

<Root>

<node1></node1>

</Root>

这种的

你图中xml格式文件,安装正常的文件类型读就行了

FileInputStream fis = new FileInputStream("textxml");

InputStreamReader dis = new InputStreamReader(fis);

BufferReader reader = new BufferReader(dis);

String s = "";

while((s=readerreadLine())!=null){

Systemoutprint(s);

}

disclose();

import w c dom ;

import javax xml parsers ;

import java io ;

public class Parse{

//Document可以看作是XML在内存中的一个镜像 那么一旦获取这个Document 就意味着可以通过对

//内存的 *** 作来实现对XML的 *** 作 首先第一步获取XML相关的Document

private Document doc=null;

public void init(String xmlFile) throws Exception{

//很明显该类是一个单例 先获取产生DocumentBuilder工厂

//的工厂 在通过这个工厂产生一个DocumentBuilder

//DocumentBuilder就是用来产生Document的

DocumentBuilderFactory dbf=DocumentBuilderFactory newInstance();

DocumentBuilder db=dbf newDocumentBuilder();

//这个Document就是一个XML文件在内存中的镜像

doc=db parse(new File(xmlFile));

}

//该方法负责把XML文件的内容显示出来

public void viewXML(String xmlFile) throws Exception{

this init(xmlFile);

//在xml文件里 只有一个根元素 先把根元素拿出来看看

Element element=doc getDocumentElement();

System out println( 根元素为: +element getTagName());

NodeList nodeList=doc getElementsByTagName( dbstore );

System out println( dbstore节点链的长度: +nodeList getLength());

Node fatherNode=em( );

System out println( 父节点为: +fatherNode getNodeName());

//把父节点的属性拿出来

NamedNodeMap attributes=fatherNode getAttributes();

for(int i= ;i<attributes getLength();i++){

Node attribute=em(i);

System out println( dbstore的属性名为: +attribute getNodeName()+ 相对应的属性值为: +attribute getNodeValue());

}

NodeList childNodes = fatherNode getChildNodes();

System out println(childNodes getLength());

for(int j= ;j<childNodes getLength();j++){

Node childNode=em(j);

//如果这个节点属于Element 再进行取值

if(childNode instanceof Element){

//System out println( 子节点名为: +childNode getNodeName()+ 相对应的值为 +childNode getFirstChild() getNodeValue());

System out println( 子节点名为: +childNode getNodeName()+ 相对应的值为 +childNode getFirstChild() getNodeValue());

}

}

}

public static void main(String[] args)throws Exception{

Parse parse=new Parse();

//我的XML文件

parse viewXML( netct xml );

}

lishixinzhi/Article/program/Java/hx/201311/26710

dom4j的写法大概如下:

String xml = "上述的xml字符串";

Document doc = DocumentHelperparseText(xml);

Element rootElt = docgetRootElement();

//有了根节点以后就可以为所欲为了

String userName = rootEltelement("adaptor-attributes")attribute("user-name")asXML();

String password =  rootEltelement("adaptor-attributes")attribute("password")asXML();

首先你要知道这个xml文件的url呀,然后用Url url = new Url(" ");

((>

通过>

JAVA与XML文件,可以说是软件开发的“黄金搭档”,而如何使用JAVA完成对XML文件的读取,是我们首先要解决的问题。

一、XML文件

这个示例文件包括了用来打开ORACLE数据库的各种参数

<xml version="10" encoding="UTF-8">

<dbmsg>

<dbinfo>

<drivername>oraclejdbcdriverOracleDriver</drivername>

<sConnStr>jdbc:oracle:thin:@118822580:1521:VOUCHERDB</sConnStr>

<username>SYS AS SYSDBA</username>

<password>voucherdb</password>

</dbinfo>

</dbmsg>

二、编写类名为ReadXml的类,用于解析XML文件

我们要在应用程序中打开数据库,就必须完成对该文件中drivername、sConnStr、username、password的读取,通过查找有关资料,笔者编制了以下程序,用于读取文件名为filename的XML文件。

package voucherbasic;

import javaioFileInputStream;

import javaioFileNotFoundException;

import javaioIOException;

import javaioInputStream;

import javaxxmlparsersDocumentBuilder;

import javaxxmlparsersDocumentBuilderFactory;

import javaxxmlparsersParserConfigurationException;

import orgw3cdomDocument;

import orgw3cdomElement;

import orgw3cdomNode;

import orgw3cdomNodeList;

import orgxmlsaxSAXException;

public class ReadXml {

private String drivername;

private String sConnStr;

private String username;

private String password;

public String getDrivername() {

return drivername;

}

public String getSConnStr() {

return sConnStr;

}

public String getUsername() {

return username;

}

public String getPassword() {

return password;

}

public void setDrivername(String drivername) {

thisdrivername = drivername;

}

public void setSConnStr(String connStr) {

sConnStr = connStr;

}

public void setUsername(String username) {

thisusername = username;

}

public void setPassword(String password) {

thispassword = password;

}

public ReadXml(String fileName){

DocumentBuilderFactory domfac=DocumentBuilderFactorynewInstance();

try {

DocumentBuilder dombuilder=domfacnewDocumentBuilder();

InputStream is=new FileInputStream(fileName);

Document doc=dombuilderparse(is);

Element root=docgetDocumentElement();

NodeList dbinfo=rootgetChildNodes();

if(dbinfo!=null){

for(int i=0;i<dbinfogetLength();i++){

Node db=dbinfoitem(i);

for(Node node=dbgetFirstChild();node!=null;node=nodegetNextSibling()){

if(nodegetNodeType()==NodeELEMENT_NODE){

if(nodegetNodeName()equals("drivername")){

setDrivername(nodegetFirstChild()getNodeValue());

}

if(nodegetNodeName()equals("sConnStr")){

setSConnStr(nodegetFirstChild()getNodeValue());

}

if(nodegetNodeName()equals("username")){

setUsername(nodegetFirstChild()getNodeValue());

}

if(nodegetNodeName()equals("password")){

setPassword(nodegetFirstChild()getNodeValue());

}

}

}

}

}

} catch (ParserConfigurationException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (SAXException e) {

// TODO Auto-generated catch block

eprintStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

}

这个以ReadXml命名的类,使用了参数为文件名的构造方法,用户只要将配置文件我名称传递给该方法,就可以完成对XML文件的解析,进而完成对相应参数数的读取。

三、如何获取XML文件全路径并读取配置参数

获取XML文件全路径的方法有两个,一是在servlet中获取,二是在单独的JAVA类中获取。

1在servlet中获取XML文件的全路径并读取配置参数

程序片段String dirPath = getServletContext()getRealPath( "/WEB-INF");

String fileName = dirPath + "/connxml";

ReadXml xm = new ReadXml(fileName);

String DriverName = xmgetDrivername();

String connStr = xmgetSConnStr();

String user = xmgetUsername();

String pas = xmgetPassword();

将这段程序添加到servlet中dopost()之后即可完成参数的读取

2在单独的JAVA类中获取全路径并读取配置参数

程序片段

String dirpath = SystemgetProperty("userdir");

String xmlFile = dirpath + "/WebRoot/WEB-INF/connxml";

ReadXml rdxml = new ReadXml(xmlFile);

String driverName = rdxmlgetDrivername();

String sConnStr = rdxmlgetSConnStr();

String userName = rdxmlgetUsername();

String passWord = rdxmlgetPassword();

注:配置文件connxml保存在webroot/WEB-INF目录中。

以上就是关于java的socke client端接收xml报文的问题全部的内容,包括:java的socke client端接收xml报文的问题、java怎么取出xml中指定节点中的内容、请问怎么样用java取出xml文件里的内容,内容如图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9721080.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存