自己写的一个类继承了DefaultHandler,我只想解析XML文档的前一个元素,例如:
<topic>
<src>http://bbs.sh.liba.com/t_507_2433949_1.htm</src>
。。
后面还有很多元素,我只想得到src中的那个URL,其他的没必要解析。
可是startElement,endElement这些方法它会自动调用,知道文件结尾。
谁能告诉我,如果只要解析很少的一部分,该怎么做啊?谢谢啦
<topic>
<src>http://bbs.sh.liba.com/t_507_2433949_1.htm</src>
。。
后面还有很多元素,我只想得到src中的那个URL,其他的没必要解析。
可是startElement,endElement这些方法它会自动调用,知道文件结尾。
谁能告诉我,如果只要解析很少的一部分,该怎么做啊?谢谢啦
解决方案 »
- java jxl读取Excel 中的数据,并插入数据库
- 求助 proxool 连接池报错
- WebServices传输文件的问题
- eclipse配置Jbpm4.4 runtime location作用
- jar包运行时的找不到hibernate的映射问题,难度不小!
- <html:errors>标签疑问
- 请问谁有读取excel的包java excelAPI
- 如何判断SMTP及用户名和密码设置的是否正确?
- 简单问题,我的JBOSS3.2.5为什么无法启动?(马上结贴,来帮帮我)
- 关于tomcat下面数据连接池的问题!请执教!~再线等待
- 求:http://xy.downjoy.com/gCmd.do?cmd=7c&sid=1r4nrhbw8h52ufe3lx60im&gid=g1这个网址的功能如何实现?
- XFIRE 的 范型 映射与调用 急~~ 高手来
我使用dom4j来解析
--可以想解析多少就解析多少!操作灵活
这两个的性能可能会高些吧如果你还有其他的要求, dom4j可能会更好些,
<?xml version="1.0" encoding="GBK"?>
<books>
<bookone title="XML study" publisher="angellove workers">
<article level="high" date="December-2007">
<title>Java configuration with XML</title>
<author>
<firstname>angel</firstname>
<lastname>free</lastname>
</author>
</article>
</bookone>
</books>
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.dom4j.Attribute;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.QName;
public class dom4j {
public void readAttribute(String filename, String xpath, String attribute) {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File(filename));
List list = document.selectNodes(xpath);
Iterator iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] argv) {
dom4j ptree = new dom4j();
ptree.modifyXML();
ptree.mymodifXML(new File("books.xml.xml") );
}
// 使用XPath表达式的查询
public void modifXML(File inputXml) {
try {//创建一个读取xml文件的对象
SAXReader saxReader = new SAXReader();//读取并获得xml文档
Document document = saxReader.read(inputXml);
//使用XPATH表达式从article元素中获得level节点列表
List list = document.selectNodes("//article/@level");
//创建一个迭代器.
Iterator iter = list.iterator();
while (iter.hasNext()) {
//获得level节点的属性
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("high"))
attribute.setValue("low");//设置属性的值
}
list = document.selectNodes("//article/@date");
iter = list.iterator();
while (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("December-2007"))
attribute.setValue("October-2006");
}
list = document.selectNodes("//article");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("title");
while (iterator.hasNext()) {
Element titleElement = (Element) iterator.next();
//获得属性的文本.
if (titleElement.getText().equals("Java configuration with XML"))
//重新设置属性的文本
titleElement.setText("good good study,day day up");
}
}
list = document.selectNodes("//article/author");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("firstname");
while (iterator.hasNext()) {
Element firstNameElement = (Element) iterator.next();
if (firstNameElement.getText().equals("angel"))
firstNameElement.setText("god");
}
}
list = document.selectNodes("//article/author");
iter = list.iterator();
while (iter.hasNext()) {
Element element = (Element) iter.next();
Iterator iterator = element.elementIterator("lastname");
while (iterator.hasNext()) {
Element lastNameElement = (Element) iterator.next();
if (lastNameElement.getText().equals("free"))
lastNameElement.setText("dark");
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter output = new XMLWriter(new FileWriter(new File("modifyBooks.xml")), format);
output.write(document);
output.close();
}catch (DocumentException e) {
}catch (IOException e) {
}
}
//访问其中某一特定节点
public void modifyXML() {
try {
SAXReader sreader = new SAXReader();
Document document = sreader.read(new File("E:\\eagle\\jms\\exc1.xml")); // E:\\eagle\\jms\\exc1.xml
Element element = document.getRootElement();
//获得根元素的名字
String rootname = element.getName();
String textname = element.getText();
System.out.println("rootname=" + rootname);
//获得指定QName,prefix,uri
QName qname = element.getQName();
//获得当前元素指定属性的值
List list = element.elements();
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Element node = (Element) iterator.next();
if ("InfStatus1".equals(node.attributeValue("RequestObject"))) {
//重新设置当前元素的名字
node.setName("InfEXC");
}
if ("Head".equals(node.getName())) {
node.setName("Head");
} else {
iterator = node.elementIterator();
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter output = new XMLWriter(new FileWriter(new File("E:\\eagle\\jms\\modifyExc.xml")), format);
output.write(document);
output.close();
} catch (DocumentException e) {
} catch (IOException e) {
}
}
}