关于java传送XML报文 和 解析XML报文的方法,谢谢

时间:2022-08-09 20:18:36
我对XML报文不是很了解,
1、请问所谓XML报文,是否就是把XML文件一行一行的全部拼起来,拼成一个大string,然后通过socket发送?
例如,要传送如下:
<Request ID=”6位请求码”>
<Head>
<Action>101<Action>
<SenderID>博卡</SenderID>
<ReceiverID>通联</ReceiverID>
<SendTime>发送时间</SendTime>
</Head>

转换成‘XML报文’就是 string=<Request ID=”6位请求码”><Head><Action>101<Action><SenderID>博卡</SenderID><ReceiverID>通联</ReceiverID><SendTime>发送时间</SendTime></Head>

是这样吧?

2、这样的报文接收后,如何进行解析,取出相应节点的数据呢?

谢谢

14 个解决方案

#1


解析XML文件 Java提供了四种解析方法 百度下

#2


这个你可以找一些关于dom4j的例子看一下。

#3


string= 
要这个干什么?

再说,你的xml不完整啊,没有<? xml version='xxx' encode='xxxx' ?>

#4


拼成string来解析,不太现实吧
应该有其他的开源组件可以用吧

#5


四种方式对xml的操作 http://zhoujingxian.javaeye.com/blog/438750

#6


给你贴个例子


==================jsp====================
<%@ page language="java" import="java.util.*,javax.xml.parsers.*,org.w3c.dom.*,java.io.*,com.controller.*" pageEncoding="utf-8"%>
<%
String xmlString = "c:\test\test.xml";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
String xml = xmlString;//application.getRealPath("user.xml");   
Document doc = db.parse(new File(xml));
doc.normalize();
Element root = doc.getDocumentElement();
NodeList users= root.getElementsByTagName("user");   
for (int i = 0; i < users.getLength(); i++) {
Element user = (Element) users.item(i);
%>
<tr>
<td>< %=user.getElementsByTagName("id").item(0).getFirstChild().getNodeValue()%></td>
<td>< %=user.getElementsByTagName("firstName").item(0).getFirstChild().getNodeValue()%></td>
<td>< %=user.getElementsByTagName("lastName").item(0).getFirstChild().getNodeValue()%></td>
<td>< %=user.getElementsByTagName("password").item(0).getFirstChild().getNodeValue()%></td>

</tr>
< %
}
%>

==================XML====================

<users>
 <user>
  <id>1</id>
  <firstname>ddfdfd</firstname>
  <lastname>ttttt</lastname>
  <password>123123</password>
 </user>
 <user>
  <id>2</id>
  <firstname>ddd</firstname>
  <lastname>sum</lastname>
  <password>123456</password>
 </user>
</users>

#7


引用 1 楼 justinavril 的回复:
解析XML文件 Java提供了四种解析方法 百度下


单纯解析xml文件我知道,我是说解析socket传递过来的 XML报文

#8


引用 3 楼 eastoneking 的回复:
string=
要这个干什么?

再说,你的xml不完整啊,没有 <? xml version='xxx' encode='xxxx' ?>


我是随便给个例子,不是完整的

#9


引用 7 楼 zyh45516 的回复:
引用 1 楼 justinavril 的回复:
解析XML文件 Java提供了四种解析方法 百度下


单纯解析xml文件我知道,我是说解析socket传递过来的 XML报文


可以把String内容放置到一个临时文件,然后解析。

#10


DOM解析
也可以读文件内容转为字符串截取自己想要的数值

#11


第一个问题没人回答呢?

#12


第一个不是问题,两种都行,不要用那个string=的东西.
xml要加PI,就是<? xml ... ?>这个,要不然没有字符集容易出问题

#13


可以把传过来的流先写成xml再解析

#14


引用 12 楼 eastoneking 的回复:
第一个不是问题,两种都行,不要用那个string=的东西.
xml要加PI,就是 <? xml ... ?>这个,要不然没有字符集容易出问题

XML报文格式定义中,是没有这个PI的,就是如上的一个XML,然后我根据 请求码 类型,给他做相应处理,再返回一个 XML报文给他。

对于字符集,只要传递的过程双方都约定好编码 比如UTF-8,不就不会出问题了吗?

#1


解析XML文件 Java提供了四种解析方法 百度下

#2


这个你可以找一些关于dom4j的例子看一下。

#3


string= 
要这个干什么?

再说,你的xml不完整啊,没有<? xml version='xxx' encode='xxxx' ?>

#4


拼成string来解析,不太现实吧
应该有其他的开源组件可以用吧

#5


四种方式对xml的操作 http://zhoujingxian.javaeye.com/blog/438750

#6


给你贴个例子


==================jsp====================
<%@ page language="java" import="java.util.*,javax.xml.parsers.*,org.w3c.dom.*,java.io.*,com.controller.*" pageEncoding="utf-8"%>
<%
String xmlString = "c:\test\test.xml";
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
String xml = xmlString;//application.getRealPath("user.xml");   
Document doc = db.parse(new File(xml));
doc.normalize();
Element root = doc.getDocumentElement();
NodeList users= root.getElementsByTagName("user");   
for (int i = 0; i < users.getLength(); i++) {
Element user = (Element) users.item(i);
%>
<tr>
<td>< %=user.getElementsByTagName("id").item(0).getFirstChild().getNodeValue()%></td>
<td>< %=user.getElementsByTagName("firstName").item(0).getFirstChild().getNodeValue()%></td>
<td>< %=user.getElementsByTagName("lastName").item(0).getFirstChild().getNodeValue()%></td>
<td>< %=user.getElementsByTagName("password").item(0).getFirstChild().getNodeValue()%></td>

</tr>
< %
}
%>

==================XML====================

<users>
 <user>
  <id>1</id>
  <firstname>ddfdfd</firstname>
  <lastname>ttttt</lastname>
  <password>123123</password>
 </user>
 <user>
  <id>2</id>
  <firstname>ddd</firstname>
  <lastname>sum</lastname>
  <password>123456</password>
 </user>
</users>

#7


引用 1 楼 justinavril 的回复:
解析XML文件 Java提供了四种解析方法 百度下


单纯解析xml文件我知道,我是说解析socket传递过来的 XML报文

#8


引用 3 楼 eastoneking 的回复:
string=
要这个干什么?

再说,你的xml不完整啊,没有 <? xml version='xxx' encode='xxxx' ?>


我是随便给个例子,不是完整的

#9


引用 7 楼 zyh45516 的回复:
引用 1 楼 justinavril 的回复:
解析XML文件 Java提供了四种解析方法 百度下


单纯解析xml文件我知道,我是说解析socket传递过来的 XML报文


可以把String内容放置到一个临时文件,然后解析。

#10


DOM解析
也可以读文件内容转为字符串截取自己想要的数值

#11


第一个问题没人回答呢?

#12


第一个不是问题,两种都行,不要用那个string=的东西.
xml要加PI,就是<? xml ... ?>这个,要不然没有字符集容易出问题

#13


可以把传过来的流先写成xml再解析

#14


引用 12 楼 eastoneking 的回复:
第一个不是问题,两种都行,不要用那个string=的东西.
xml要加PI,就是 <? xml ... ?>这个,要不然没有字符集容易出问题

XML报文格式定义中,是没有这个PI的,就是如上的一个XML,然后我根据 请求码 类型,给他做相应处理,再返回一个 XML报文给他。

对于字符集,只要传递的过程双方都约定好编码 比如UTF-8,不就不会出问题了吗?