可以考虑使用sax或者jdom来解析xml,你可以看看sax和jdom!
解决方案 »
- java 调用 webservice 实现天气预报
- 各位大侠,都知道使用Runtime.getRuntime().exec(cmd);让java执行服务器指令,但我这个指令有时可以有所就出错
- 很简单的spring管理事务为啥不回滚呢 大家快进 求解???
- 简单的问题 关于网页表现层框架
- 调用axis客户端的问题
- 写了这段代码后还需要建立dsn源吗??
- 怎么可以给一个url传参数了,同时又跳转回之前的页面呢?高分
- 救命!!!非常急~~~
- 高分求救:请问能不能实现servlet同另外一个服务器程序的通信,在局域网内
- 求助!怎么让查询的到的对象少于一定数量????
- 不可理解的404错误!请高手查错!帮帮忙!急! 谢谢!
- 高分求:JSP或JAVA调用EXCEL打印,预览,另存功能,都半个月了一个进展也没有???
解析XML的同时输出html代码
解析XML本身就是很需要时间的.
import java.io.Serializable;
import java.util.Vector;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
public class XMLMake implements Serializable {
private Document doc;
private StringBuffer rs;
private Element rootElem;public XMLMake() {
try
{
rs = new StringBuffer();
doc = (Document)Class.forName("weblogic.apache.xerces.dom.DocumentImpl").newInstance();
rootElem = doc.createElement("Root");
doc.appendChild(rootElem);
}
catch (Exception e)
{
System.err.println(e);
}
}public String getResult() {
printDOMTree(doc);
String retString = rs.toString();
return retString;
}public void printDOMTree(Node node) {
try{
int type = node.getNodeType();
switch (type)
{
// print the document element
case Node.DOCUMENT_NODE:
{
rs.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
printDOMTree(((Document)node).getDocumentElement());
break;
} // print element with attributes
case Node.ELEMENT_NODE:
{
rs.append("<");
rs.append(node.getNodeName());
NamedNodeMap attrs = node.getAttributes();
for (int i = 0; i < attrs.getLength(); i++)
{
Node attr = attrs.item(i);
rs.append(" " + attr.getNodeName() +"=\"" + attr.getNodeValue() + "\"");
}
rs.append(">"); NodeList children = node.getChildNodes();
if (children != null)
{
int len = children.getLength();
for (int i = 0; i < len; i++)
printDOMTree(children.item(i));
} break;
} // handle entity reference nodes
case Node.ENTITY_REFERENCE_NODE:
{
rs.append("&");
rs.append(node.getNodeName());
rs.append(";");
break;
} // print cdata sections
case Node.CDATA_SECTION_NODE:
{
rs.append("<![CDATA[");
rs.append(node.getNodeValue());
rs.append("]]>");
break;
} // print text
case Node.TEXT_NODE:
{
rs.append(node.getNodeValue());
break;
} // print processing instruction
case Node.PROCESSING_INSTRUCTION_NODE:
{
rs.append("<?");
rs.append(node.getNodeName());
String data = node.getNodeValue();
{
rs.append(" ");
rs.append(data);
}
rs.append("?>");
break;
}
} if (type == Node.ELEMENT_NODE)
{
rs.append("</");
rs.append(node.getNodeName());
rs.append(">\n");
}
}
catch (Exception e)
{
System.err.println(e);
}
}public void setDocument(String name, Vector vec, Element parentElement) {
try{
Element thisRootElem = doc.createElement(name);
parentElement.appendChild(thisRootElem);
int i,size;
size = vec.size();
for(i = 1;i <= size;i = i + 2){
if(Vector.class.isInstance(vec.elementAt(i))){
setDocument((String)vec.elementAt(i - 1),(Vector)vec.elementAt(i),thisRootElem);
}
else{
Element thisElem = doc.createElement((String)vec.elementAt(i - 1));
Text thisText = doc.createTextNode("value");
thisText.setNodeValue(vec.elementAt(i).toString());
thisElem.appendChild(thisText);
thisRootElem.appendChild(thisElem);
}
}
}
catch (Exception e)
{
System.err.println(e);
}
}public void setParameter(String name, Object[] beans) {
try{
for(int i = 0;i < beans.length;i++){
setParameter(name,beans[i]);
}
}
catch (Exception e)
{
System.err.println(e);
}
}public void setParameter(String name, Object bean) {
try{
Vector vec1;
vec1 = ConversionUtils.convertBeanToVector(bean);
setDocument(name,vec1,rootElem);
}
catch (Exception e)
{
System.err.println(e);
}
}
}
--------------------------
import java.io.File;
import java.io.FileWriter;
import java.io.Serializable;
import java.util.Vector;import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import weblogic.apache.xerces.parsers.DOMParser;
public class XMLParser implements Serializable {
DOMParser parser;
Document doc;
Object bean;
Vector beanVec;public Vector getParameter(Node rootNode) {
Vector rv = new Vector();
try{
NodeList nl = rootNode.getChildNodes();
int nodeLength = nl.getLength();
for(int i = 0;i < nodeLength;i++){
Node thisNode = nl.item(i);
String nodeName = thisNode.getNodeName();
NodeList children = thisNode.getChildNodes();
int childrenLength = children.getLength();
if(children != null && childrenLength != 0){
if(childrenLength == 1 && !(children.item(0).hasChildNodes())){
Node child = children.item(0);
String nodeValue = child.getNodeValue();
rv.addElement(nodeName);
rv.addElement(nodeValue);
}
else{
NamedNodeMap attrs = thisNode.getAttributes();
String packName = "";
for (int j = 0; j < attrs.getLength(); j++)
{
Node attr = attrs.item(j);
if(attr.getNodeName().equals("packName")){
packName = attr.getNodeValue();
}
}
Vector subVec = getParameter(thisNode);
rv.addElement(packName + "&" + nodeName);
rv.addElement(subVec);
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return rv;
}public Vector getResult() {
return beanVec;
}/**
* XMLParser 构造子注释
*/
public XMLParser(String inputStr) {
try{
beanVec = new Vector();
parser = new DOMParser();
String fileName = StringUtil.getRandomNumber().toString().substring(0,8);
String filePath = "c:\\Temp\\"; //保存地址
File tempFile = new File(filePath + fileName + ".xml");
FileWriter fw = new FileWriter(tempFile);
fw.write(inputStr);
fw.close();
String documentURL = tempFile.toURL().toString();
parser.parse(documentURL);
doc = parser.getDocument();
Vector rv = new Vector();
Node rootNode = doc.getDocumentElement();
String nodeName = rootNode.getNodeName(); NodeList nl = rootNode.getChildNodes();
for(int i = 0;i < nl.getLength();i++){
Node thisNode = nl.item(i);
rv = getParameter(thisNode);
NamedNodeMap attrs = thisNode.getAttributes();
String packName = "";
for (int j = 0; j < attrs.getLength(); j++)
{
Node attr = attrs.item(j);
if(attr.getNodeName().equals("packName")){
packName = attr.getNodeValue();
}
}
Object retObj = ConversionUtils.convertVectorToBean(packName,rv);
beanVec.addElement(retObj);
}
}catch(Exception e){
e.printStackTrace();
}
}
}应该没问题的
需要什么样子的xml文件
<Config>
<User>user</User>
<Password>password</Password>
</Config>
这样的文件是很好解析的
<ServerConfig>
<Server ServerId = "Server1">
<Service ServiceId = "Service1">
</Service>
<Service ServiceId = "Service2">
</Service>
</Server>
<Server ServerId = "Server2">
<Service ServiceId = "Service1">
</Service>
</Server>
</ServerConfig>
这样的就需要递归算法
先进行需求分析是十分必要
磨刀不误砍材功
根据需求尽快确定xml文件的形式
就是把数据库里的某个表的信息放到xml里,然后再显示在页面上,好像是这个意识。
但是我搞不懂,是用表里的数据生成一个xml还是xml里定义了相应的字段,然后通过某种方法就能显示。