求JAVA 获取客户端本地磁盘上的XML文件的内容 如我要读取本地机器上D:下的一个XML文件的某个节点的内容 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 客户端是java写的话,就直接读取D盘下某某个文件如果是web系统的话,用java做的话,用applet,不想用java可以借助Actix控件,网上也有一些第三方公司的控件,但多是收费的。 public static void main(String[] args) throws JDOMException { //取得当前主机存放项目的绝对路径 String workPath = System.getProperty("user.dir"); //实例化 JDomHandler jdomhandler = new JDomHandler(); //得到document对象 Document doc = jdomhandler.loadXmlByPath(workPath + File.separator + "config" + File.separator + "461030.xml"); //把document对象设置到set属性中去 jdomhandler.setDoc(doc); //doc=document.addNodeVaue("ROOT/HEAD", "aa;a", "ccc"); //doc=document.removeNodesUnderOneNode("trades/trade",doc); //doc = document.modifyNodeValue("trades/trade/aaa", "bbb"); //String aa = document.getNodeValue("trades/trade/aaa"); //声明属性 String attribute = ""; String value=""; String value2 = ""; List l = null; try { value = jdomhandler.getNodeValue("ROOT/HEAD/NODENAME"); //System.out.println("##################"+value); //attribute = jdomhandler.getNodeAttribute("trades/trade", "av"); jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "CC"); jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "BB"); jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "AA"); Map m = new Hashtable<String,String>(); m.put("aa", "bb"); m.put("aa1", "bb1"); jdomhandler.addNodeAttribute("ROOT/HEAD", m); //得到单个的节点所对应的值 //System.out.println(jdomhandler.hasNode("ROOT/HEAD/bbbb")); //System.out.println((jdomhandler.getNodeAttribute("ROOT/HEAD", "aa"))); //System.out.println((jdomhandler.getNodeAttribute("ROOT/HEAD", "aa1"))); value2 = jdomhandler.getNodeValue("ROOT/HEAD/bbb"); l= jdomhandler.getNodeValues("ROOT/HEAD/bbb"); System.out.println(jdomhandler.toString()); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JDomHandlerException e) { // TODO Auto-generated catch block e.printStackTrace(); } //List l = document.getNodeValues("trades/trade/aaa"); //boolean flag = jdomhandler.hasNode("trades/trade/treatment/classname"); //List l = document.getNodeNames("trades/trad"); //doc = document.removeNode("trades/trade/aaa"); //System.out.println(document.toString(doc)); // System.out.println("attribute:"+attribute);// System.out.println("value:"+value);// System.out.println("value2:"+value2);// System.out.println("listSize:"+l); } public Document loadXmlByPath(String path) { try { //表示使用的是默认的解析器 SAXBuilder builder = new SAXBuilder(false); //得到document doc = builder.build(new File(path)); } catch (Exception e) { e.printStackTrace(); } return doc; } 要读取文件。知道路径就是用io流来获取xml了 我还看到过一种 public Document getDocument() { try { File file = new File(路径); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); return db.parse(file); } catch (Exception e) { Log.addErrorLog("获取Document时发生异常:" + e.getMessage()); } return null; } public HashMap<Object, Object> getFetionFromData() { HashMap fromHM = new HashMap(); Document doc = getDocument(); NodeList nlFrom = doc.getElementsByTagName("主节点名称"); for (int i = 0; i < nlFrom.getLength(); ++i) { fromHM.put("节点名称", doc.getElementsByTagName("fetion-tel").item(i).getFirstChild().getNodeValue()); fromHM.put("节点名称", doc.getElementsByTagName("fetion-pwd").item(i).getFirstChild().getNodeValue()); } return fromHM; }感觉上很奇怪,dom解析下个api,看着搞就行了 import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import org.xml.sax.helpers.DefaultHandler;public class TestSAXParser { /** 基于SAX方式解析XML文档 */ public static void main(String[] args) throws SAXException,ParserConfigurationException,IOException{ SAXParserFactory factory = SAXParserFactory.newInstance(); //创建SAX解析器工厂 factory.setValidating(true); //让error方法生效 SAXParser parser = factory.newSAXParser(); //生成一个具体的SAX解析器 parser.parse("src/file/student.xml",new XMLreader()); //开始解析}}class XMLreader extends DefaultHandler { // 只需覆盖我们感兴趣的方法 private int counter = 0;// 定义一个计数器,保存XML文档触发事件的次数 @Override // 文档开始事件触发 public void startDocument() throws SAXException { counter++; System.out.println(counter + ".解析XML文件开始...");} @Override // 文档结束事件触发 public void endDocument() throws SAXException { counter++; System.out.println("\r\n"+counter + ".解析XML文件结束...");} @Override // 元素开始事件触发 public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { counter++; System.out.print(counter+".<"+qName); for(int i=0; i<atts.getLength();i++){ //读取标志的所有属性 System.out.print(" "+atts.getLocalName(i)+"="+atts.getValue(i)); }System.out.print(">"); } @Override // 元素结束事件触发 public void endElement(String uri, String localName, String qName) throws SAXException { counter++; System.out.print(counter +".</"+qName+">");} @Override // 文本事件触发 打印时尽量不要换行,否则很难看 public void characters(char[] ch, int start, int length)throws SAXException { counter++; String text = new String(ch, start, length); // 当前元素的文本值 System.out.print(counter + ".Text=" + text);} @Override //这是可恢复错误。需在SAXParserFactory设置有效性错误才能生效 public void error(SAXParseException e) throws SAXException { System.out.println("xml文档有效性错误:"+e);} @Override //严重错误 public void fatalError(SAXParseException e) throws SAXException { System.out.println("xml文档严重的有效性错误:"+e);}} 比较DOM与SAX: DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问 优点:1.提供随机定义元素操作,来回移动指针 2.将整个XML文件一次性加载到内存,形成虚的内存树 缺点:1.如果XML文件较大,内存空间占用较大 2.强制将较大的XML文件加载到内存中,有可能损害文件 3.功能通用性 SAX:不同于DOM,SAX是事件驱动型的XML解析方式。它顺序逐行读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 B/S 应用是无法读取客户端机器上的 XML 文档的。 菜鸟在javaweb中遇到的问题。。求高人解答。。。。 如何实现倒序分页的实现 菜鸟问问题,大家快来抢分! 创建servlet后运行出现了Help viewer error是什么原因 jsp中怎么判断是否有checkbox被选中? 求JBOSS3.2.1_tomcat-4.1.24下载地址 收到后马上散分 求教:jsp for循环输出数据库,结果只输出了第一行 为什么validwhen用起来没有反映?有用过的兄弟吗 onMouseOver的语法是怎么样的,怎么使用,谢谢 急救!请各位“神医”给我的bean开个方子, 安装websphere出问题了!!! itext5.0.2版本的中文怎么处理
public static void main(String[] args) throws JDOMException {
//取得当前主机存放项目的绝对路径
String workPath = System.getProperty("user.dir");
//实例化
JDomHandler jdomhandler = new JDomHandler();
//得到document对象
Document doc = jdomhandler.loadXmlByPath(workPath + File.separator + "config"
+ File.separator + "461030.xml");
//把document对象设置到set属性中去
jdomhandler.setDoc(doc);
//doc=document.addNodeVaue("ROOT/HEAD", "aa;a", "ccc");
//doc=document.removeNodesUnderOneNode("trades/trade",doc);
//doc = document.modifyNodeValue("trades/trade/aaa", "bbb");
//String aa = document.getNodeValue("trades/trade/aaa");
//声明属性
String attribute = "";
String value="";
String value2 = "";
List l = null;
try {
value = jdomhandler.getNodeValue("ROOT/HEAD/NODENAME");
//System.out.println("##################"+value);
//attribute = jdomhandler.getNodeAttribute("trades/trade", "av");
jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "CC");
jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "BB");
jdomhandler.addNodeVaue("ROOT/HEAD","bbb", "AA");
Map m = new Hashtable<String,String>();
m.put("aa", "bb");
m.put("aa1", "bb1");
jdomhandler.addNodeAttribute("ROOT/HEAD", m);
//得到单个的节点所对应的值
//System.out.println(jdomhandler.hasNode("ROOT/HEAD/bbbb"));
//System.out.println((jdomhandler.getNodeAttribute("ROOT/HEAD", "aa")));
//System.out.println((jdomhandler.getNodeAttribute("ROOT/HEAD", "aa1")));
value2 = jdomhandler.getNodeValue("ROOT/HEAD/bbb");
l= jdomhandler.getNodeValues("ROOT/HEAD/bbb");
System.out.println(jdomhandler.toString());
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JDomHandlerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//List l = document.getNodeValues("trades/trade/aaa");
//boolean flag = jdomhandler.hasNode("trades/trade/treatment/classname");
//List l = document.getNodeNames("trades/trad");
//doc = document.removeNode("trades/trade/aaa");
//System.out.println(document.toString(doc));
// System.out.println("attribute:"+attribute);
// System.out.println("value:"+value);
// System.out.println("value2:"+value2);
// System.out.println("listSize:"+l);
}
try {
//表示使用的是默认的解析器
SAXBuilder builder = new SAXBuilder(false);
//得到document
doc = builder.build(new File(path));
} catch (Exception e) {
e.printStackTrace();
}
return doc;
}
{
try
{
File file = new File(路径);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
return db.parse(file);
} catch (Exception e) {
Log.addErrorLog("获取Document时发生异常:" + e.getMessage()); }
return null;
} public HashMap<Object, Object> getFetionFromData()
{
HashMap fromHM = new HashMap();
Document doc = getDocument();
NodeList nlFrom = doc.getElementsByTagName("主节点名称");
for (int i = 0; i < nlFrom.getLength(); ++i) {
fromHM.put("节点名称", doc.getElementsByTagName("fetion-tel").item(i).getFirstChild().getNodeValue());
fromHM.put("节点名称", doc.getElementsByTagName("fetion-pwd").item(i).getFirstChild().getNodeValue());
}
return fromHM;
}感觉上很奇怪,dom解析下个api,看着搞就行了
import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;public class TestSAXParser {
/** 基于SAX方式解析XML文档 */
public static void main(String[] args)
throws SAXException,ParserConfigurationException,IOException{
SAXParserFactory factory = SAXParserFactory.newInstance(); //创建SAX解析器工厂
factory.setValidating(true); //让error方法生效
SAXParser parser = factory.newSAXParser(); //生成一个具体的SAX解析器
parser.parse("src/file/student.xml",new XMLreader()); //开始解析
}}class XMLreader extends DefaultHandler {
// 只需覆盖我们感兴趣的方法
private int counter = 0;// 定义一个计数器,保存XML文档触发事件的次数
@Override // 文档开始事件触发
public void startDocument() throws SAXException {
counter++;
System.out.println(counter + ".解析XML文件开始...");}
@Override // 文档结束事件触发
public void endDocument() throws SAXException {
counter++;
System.out.println("\r\n"+counter + ".解析XML文件结束...");}
@Override // 元素开始事件触发
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
counter++;
System.out.print(counter+".<"+qName);
for(int i=0; i<atts.getLength();i++){ //读取标志的所有属性
System.out.print(" "+atts.getLocalName(i)+"="+atts.getValue(i));
}System.out.print(">"); }
@Override // 元素结束事件触发
public void endElement(String uri, String localName, String qName) throws SAXException {
counter++;
System.out.print(counter +".</"+qName+">");}
@Override // 文本事件触发 打印时尽量不要换行,否则很难看
public void characters(char[] ch, int start, int length)throws SAXException {
counter++;
String text = new String(ch, start, length); // 当前元素的文本值
System.out.print(counter + ".Text=" + text);}
@Override //这是可恢复错误。需在SAXParserFactory设置有效性错误才能生效
public void error(SAXParseException e) throws SAXException {
System.out.println("xml文档有效性错误:"+e);}
@Override //严重错误
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("xml文档严重的有效性错误:"+e);}
}
比较DOM与SAX:
DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
优点:1.提供随机定义元素操作,来回移动指针
2.将整个XML文件一次性加载到内存,形成虚的内存树
缺点:1.如果XML文件较大,内存空间占用较大
2.强制将较大的XML文件加载到内存中,有可能损害文件
3.功能通用性 SAX:不同于DOM,SAX是事件驱动型的XML解析方式。它顺序逐行读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问