如何解析XML字符串

itti 2011-01-06 08:06:53
早上好,各位:
我是XML新手。
我有一段XML字符串保存在数据库字段中,我想把这段XML字符串按一定的格式显示在网页的某个位置上,请问如何解析XML字符串并按我的格式显示。
感谢您的任何有益的建议或方法!
...全文
795 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljybasically 2011-03-01
  • 打赏
  • 举报
回复
按照例子写过一个,但其实对原理还不是很明白
18PI 2011-02-14
  • 打赏
  • 举报
回复
xml,刚学了点皮毛啊,神马都没弄懂
alsamsung 2011-01-21
  • 打赏
  • 举报
回复
学习了,刚刚接触xml
KK3K2005 2011-01-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 itti 的回复:]

最方便的方法是什么?DOM?XSLT?
[/Quote]
单单显示xml 就用xslt
heardy 2011-01-12
  • 打赏
  • 举报
回复
xml 的四种解析方法(SAX、DOM、JDOM、DOM4J)

我比较喜欢用dom4J
Dream_Daisy 2011-01-06
  • 打赏
  • 举报
回复
如果xml是这种结构
<?xml version="1.0" encoding='UTF-8'?>
<requestSummary currentTime='' startDay='2009-12-23' endDay='2009-12-23'>
<building building='2'>
<floor floorName='1'>
<line lineName='N1'>
<completedInfo seatNo='12' ticket='1'>
<completedDetail requestTime='43223556647'
requestStaffNo='H0051' requestStaffName='张三'>
</completedDetail>
</completedInfo>
<completedInfo seatNo='13' ticket='2'>
<completedDetail requestTime='43223556647'
requestStaffNo='H0050' requestStaffName='小王'>
</completedDetail>
</completedInfo>
</line>
</floor>
</building>

</requestSummary>


一下是java解析代码:
第一步,查找孩子结点及父结点
public void getChildForDetail(Node node) {

if (node.hasAttributes()) {
DetailData detailData = new DetailData();

// setBuildingName
detailData.setBuildingName(buildingName);

HashMap<String, String> detailMap = new HashMap<String, String>();

if ("completedInfo".equals(node.getNodeName())) {

// 下面的代码为InProgressRequest特制------
Node parent = node.getParentNode();
String pName = parent.getNodeName();
if ("line".equals(pName)) {
getParentAttr(parent,detailMap);
}

//为InProgressRequest特制 End-----
getChildAttrByNode(node, detailMap);

// setDetailMap
detailData.setDetailMap(detailMap);

// detailData 对象添加
detailList.add(detailData);
}

}
if (node.hasChildNodes()) {
NodeList n2 = node.getChildNodes();
for (int j = 0; j < n2.getLength(); j++) {
getChildForDetail((Node) n2.item(j));
}
}
}

第2步:取出结点的属性
/**
* 取出detailDate信息
*
* @param node
* 当前节点
* @param detailMap
* 存储当前节点及子节点的所有属性信息
*/
public void getChildAttrByNode(Node node,
HashMap<String, String> detailMap) {

if (node.hasAttributes()) {
NamedNodeMap nnm = node.getAttributes();
int len = nnm.getLength();

for (int j = 0; j < len; j++) {

Node attr = nnm.item(j);
detailMap.put(attr.getNodeName(), setValueForNull(attr
.getNodeValue()));
}

}

if (node.hasChildNodes()) {
NodeList n2 = node.getChildNodes();
for (int j = 0; j < n2.getLength(); j++) {
getChildAttrByNode((Node) n2.item(j), detailMap);
}
}
}
xml结构有多种情况,需视情况而解析,注意是关键性的节点循环的地方发生变化
Dream_Daisy 2011-01-06
  • 打赏
  • 举报
回复
解析xml有多种方法:Dom解析、Sax解析等
下面是java基础的解析方法:
对下面的xml格构进行解析
<?xml version="1.0" encoding='UTF-8'?>
<requestSummary currentTime='' startDay='2009-12-23' endDay='2009-12-23'>
<dailySummary day='2008-03-01' totalCall='298'
avgResponseTime='00:05' avgRepairTime='00:35'>
</dailySummary>
<dailySummary day='2008-03-01' totalCall='340'
avgResponseTime='00:03' avgRepairTime='00:50'>
</dailySummary>
</requestSummary>

/**
* 迭代child结点
* @param node
* @param map
*/
public void getChild(Node node, HashMap<String, String> map) {

if (node.hasAttributes()) {
getAttrByNode(node, map);

}
if (node.hasChildNodes()) {
NodeList n2 = node.getChildNodes();
for (int j = 0; j < n2.getLength(); j++) {
getChild((Node) n2.item(j), map);
}
}
}

/**
* 得到当前结点的属性
* @param node
* @param map
*/
public void getAttrByNode(Node node, HashMap<String, String> map) {

if (node.hasAttributes()) {

NamedNodeMap nnm = node.getAttributes();

int len = nnm.getLength();

for (int j = 0; j < len; j++) {

Node attr = nnm.item(j);

map.put(attr.getNodeName(),
setValueForNull(attr.getNodeValue()));
}
}
}


itti 2011-01-06
  • 打赏
  • 举报
回复
最方便的方法是什么?DOM?XSLT?

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧