[100高分求解]解析简单的XML

leesy 2008-09-02 09:01:50
<A>
<B>bbb</B>
<C>ccc</C>
<D id=1>
<E>eee</E>
<F>fff</F>
</D>
<D id=2>
<E>eeee</E>
<F>ffff</F>
</D>
</A>

//其中通过getDefine("/A/B/D[id=1]/E")返回:eee
//通过getDefine("/A/B/D[id=2]")返回:<E>eeee</E><F>ffff</F>

用Java怎么实现?谢谢!
...全文
149 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leesy 2008-09-03
  • 打赏
  • 举报
回复
算账啦~~
大虾哥哥 2008-09-02
  • 打赏
  • 举报
回复
用jdom或者dom4j解析比较方便
以使用dom1.0为例:
Document doc = new Document();//jdom的Document对象
SAXBuilder sb = new SAXBuilder();//SAX解析器
doc = sb.build("xml的路径");
XPath xpath1 = XPath.newInstance("/A/B/D[id=1]/E");//xpath定位
XPath xpath2 = XPath.newInstance("/A/B/D[id=2]");
Content cont = (Content)xpath1.selectSingleNode(doc);//得到Content对象
Element ele = (Element)xpath2.selectSingleNode(doc);得到//Element对象
chensheng913 2008-09-02
  • 打赏
  • 举报
回复
用Dom4j解析,能够满足你的需要。
非典型射手 2008-09-02
  • 打赏
  • 举报
回复
简单的XML就用DOM就行了,树型结构,层次分明
leesy 2008-09-02
  • 打赏
  • 举报
回复
难道就没有一个方法直接解析这个XML吗?谢谢你们的参与!
xingfuxiao 2008-09-02
  • 打赏
  • 举报
回复
不错啊。学习了。谢谢哦。
xingfuxiao 2008-09-02
  • 打赏
  • 举报
回复
路过。我来顶一下。。。
海会圣贤 2008-09-02
  • 打赏
  • 举报
回复
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;

import java.io.IOException;
import java.io.StringWriter;

//读取xml文件
public class XMLBlob {

private String xml;

private String column;

private Document doc;

public XMLBlob(String column) {
doc = DocumentHelper.createDocument();
doc.setXMLEncoding("UTF-8");
doc.addElement(column);
this.column = column;
}

public XMLBlob(String xml, String column) {
this.xml = xml;
this.column = column;
try {
doc = DocumentHelper.parseText(xml);
} catch (DocumentException e) {

}
}

public String getXml() {
StringWriter stringWriter = new StringWriter();
XMLWriter writer = new XMLWriter(stringWriter);
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
try {
writer.write(doc);
writer.close();
this.xml = stringWriter.toString();
stringWriter.close();
} catch (IOException e) {
this.xml = null;
}
return xml;
}

public void setXml(String xml) {
this.xml = xml;
}

public String getColumn() {
return column;
}

public void setColumn(String column) {
this.column = column;
}

public void setValue(String name, String value) {
Element root = doc.getRootElement();
Element element = root.element(name);
if(element == null) {
element = root.addElement(name);
}
element.setText(value);
}

public String getValue(String name) {
Element root = doc.getRootElement();
Element element = root.element(name);
return element.getText();
}
}

//******************************************************************************
//测试类


public class TestXML {

/**
* @param args
*/
public static void main(String[] args) {

XMLBlob xml = new XMLBlob("customerInfo");
xml.setValue("phoneNumber", "1234556");
xml.setValue("phoneNumber", "6543221");
xml.setValue("mobile", "136543221");
String str = xml.getXml();

XMLBlob x = new XMLBlob(str, "customerInfo");
String val = x.getValue("phoneNumber");

System.out.println(str);
System.out.println(val);
}

}

楼主结贴去吧!
miaoliujun 2008-09-02
  • 打赏
  • 举报
回复
你的这种写法是XSL写法吧或者用的xquery
个人建议你看下xstream,这个更方便
lovewds2002 2008-09-02
  • 打赏
  • 举报
回复
顶一个.
huangyangweiyue 2008-09-02
  • 打赏
  • 举报
回复
DOM4J解析用法

package com.Xml.dom4j;

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class MyDom4j {

private static Document doc;
private static SAXReader saxReader;
private static Element element;


private static File getFile(String filePath)
{
File file = new File(filePath);
return file;
}

public Element getDocument(String filePath)
{
try {
File file = getFile(filePath);
saxReader = new SAXReader();
doc = saxReader.read(file);
element = doc.getRootElement();
} catch (DocumentException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return element;
}

}

huangyangweiyue 2008-09-02
  • 打赏
  • 举报
回复
解析类

package com.source.DAO;

import java.sql.*;

import org.dom4j.Element;
import java.util.Iterator;
import com.Xml.dom4j.MyDom4j;

public class DBConnection {

private String url = "";
private String driver ="";
private String password = "";
private String user = "";
private Element e ;
private Element element;

private Connection conn = null;

public DBConnection(String xPath)
{
MyDom4j dom4j = new MyDom4j();
e = dom4j.getDocument(xPath);
for(Iterator it = e.elementIterator("connection");it.hasNext();)
{
element = (Element)it.next();
}
this.url = element.elementText("url");
this.driver = element.elementText("driver");
this.password = element.elementText("pwd");
this.user = element.elementText("user");
}

private Connection setConn()
{
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return conn;
}

public Connection getConn()
{
return setConn();
}

public void closeConn()
{
try {
conn.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}

}

海会圣贤 2008-09-02
  • 打赏
  • 举报
回复
好像没有直接解折的方法!
一般是自己写!因为xml本身就很灵活

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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