解析xml类型的字符串对我来说是很重要的一部分
String str = "<service><sid>1</sid><name>新闻发布服务</name><port>1599</port></service>";
因为项目中要多次用到解析字符串的方法,麻烦各位给支个招,简单方便快捷的方法是最好的啦
String str = "<service><sid>1</sid><name>新闻发布服务</name><port>1599</port></service>";
因为项目中要多次用到解析字符串的方法,麻烦各位给支个招,简单方便快捷的方法是最好的啦
解决方案 »
- Stucts下拉列表查询显示问题
- struts2的小问题 在线等..
- JAVA如何按条读XML内容
- spring、hibernate执行sql异常,无法解决了。
- javax.servlet.ServletException: org.apache.struts.chain.commands.InvalidPathExce
- 反编译工具jode-1.1.2-pre1.jar怎么用,怎么执行?
- jboss如何配置log4j
- No ResultSet set was produced.异常
- 一個基於j2ee的erp系統,j2ee高手進來拿分
- struts2 利用json返回数据,前台一直得不到后台的数据
- tomcat调用jboss ejb3 出错
- pl/sqldeveloper的product code
/**
* 建立数据文件的读取连接
*
* @return 读取成功时返回Document对象,失败则返回空
*/
public static Document getDocument() { Document doc1 = null;
File file = new File("xml_path");
SAXReader xml_read = new SAXReader();
try {
doc1 = xml_read.read(file);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
return doc1; }
private Element search_service(Document doc, String id) { Element root = doc.getRootElement();
String xml_path = "/service/sid";
Node node = root.selectSingleNode(xml_path);
if (node != null) {
if (node.getNodeType() == Node.ELEMENT_NODE) {
return (Element) node;
}
} return null;
}
获取xml的数据:
public void getData(){
doc = getDocument();
Element e = search_service(doc, id);
String name=e.elementText("name");
///还要获得其他结点信息
}基本上可以按上面的去做,只供参考,有些xml路径等其他,要根据你自己的
import java.io.File;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;
import org.w3c.dom.NodeList;public class Xml {
public static void main(String[] args) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File("./新建 文本文档.xml"));
NodeList list = document.getElementsByTagName("Header");
for (int i = 0; i < list.getLength(); i++) {
System.out.println(list.item(i).getFirstChild().getNodeValue());
}
} catch (Exception e) {
}
}
}
提供一段代码
rules.xml
<?xml version="1.0" encoding="UTF-8" ?>
<digester-rules>
<pattern value="foo">
<object-create-rule classname="example.Foo" />
<set-properties-rule />
<bean-property-setter-rule pattern="name" />
<bean-property-setter-rule pattern="age" />
<pattern value="bar">
<object-create-rule classname="example.Bar" />
<set-properties-rule />
<bean-property-setter-rule pattern="id" />
<bean-property-setter-rule pattern="title" />
<set-next-rule methodname="setBars" />
<pattern value="childList">
<pattern value="child">
<object-create-rule classname="example.Child" />
<set-properties-rule />
<bean-property-setter-rule pattern="sex" />
<bean-property-setter-rule pattern="school" />
<set-next-rule methodname="addChild" />
</pattern>
</pattern>
</pattern>
</pattern>
</digester-rules>
foo.xml
<?xml version="1.0" encoding="UTF-8" ?>
<foo>
<name>myname</name>
<age>123</age>
<bar>
<id>123</id>
<title>the First Child</title>
<childList>
<child>
<sex>male</sex>
<school>jakakかかかjakak</school>
</child>
<child>
<sex>female</sex>
<school>campus</school>
</child>
</childList>
</bar>
</foo>java文件public class ObjectToXml {
public static void main(String args[]) throws Exception
{
File data = new File("src/resources/foo.xml");
File rule = new File("src/resources/rules.xml");
Digester digester = DigesterLoader.createDigester(rule.toURI().toURL());
Foo foo = (Foo)digester.parse(data);
Iterator it = foo.getBars();
while(it.hasNext())
System.out.println((String)it.next());
}}
Document doc=DocumentHelper.parseText(xml);
首先你要下载一个xstream包并应入到项目中
写XML文件:
public class WriteXml {
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import com.thoughtworks.xstream.*;
public static boolean writes(Object[] bean,String XMLNAME) {
//Set the properties using the setter methods
//Note: This can also be done with a constructor.
//Since we want to show that XStream can serialize
//even without a constructor, this approach is used.
//Serialize the object
XStream xs = new XStream(); //Write to a file in the file system
try {
FileOutputStream fs = new FileOutputStream("./XML/"+XMLNAME); xs.toXML(bean, fs);
return true;
} catch (FileNotFoundException e1) {
return false;
}
}读XML文件:import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.DomDriver;
import MZ.Factory.*;
public class Reader { public static void read(String object,String XMLNAME) throws InvalidPropertiesFormatException, FileNotFoundException, InstantiationException, IllegalAccessException, ClassNotFoundException, IOException{
XStream xs = new XStream(new DomDriver());
Object o= factory.getobject(object); try {
FileInputStream fis = new FileInputStream("./XML/"+XMLNAME);
xs.fromXML(fis, o); //print the data from the object that has been read
System.out.println(o.toString()); } catch (FileNotFoundException ex) {
System.out.print("xml文件不存在!!请检查路径是否正确");
ex.printStackTrace();
} }
}这个方法比dom、sax、stax方法简单一些!!!
<?xml version="1.0" encoding="GBK"?>
<books>
<!--—An XML Example--><?target text?>
<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 java.io.*;
import org.dom4j.Attribute;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import java.util.List;
import java.util.Iterator;
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") );
}
// 创建一个xml文件
public void changeXML() {
Document document = DocumentHelper.createDocument();// 创建一个xml document对象
Element books = document.addElement("books");// 创建根节点元素
// 给books添加注释
books.addComment("—An XML Example");
// 使用addProcessingInstruction()方法增加一个处理指令
books.addProcessingInstruction("target", "text");
// 在当前元素后增加一个子元素
Element bookone = books.addElement("bookone");
// 设置当前元素的属性
bookone.addAttribute("title", "XML study");
bookone.addAttribute("publisher", "angellove workers");
Element article = bookone.addElement("article");
article.addAttribute("level", "high");
article.addAttribute("date", "December-2007");
Element titleElement = article.addElement("title");
// 设置当前元素的文本值,即是内容
titleElement.setText("Java configuration with XML");
Element authorElement = article.addElement("author");
Element firstNameElement = authorElement.addElement("firstname");
firstNameElement.setText("angel");
Element lastNameElement = authorElement.addElement("lastname");
lastNameElement.setText("free");
// XML 声明 <?xml version="1.0" encoding="UTF-8"?> 自动添加到 XML 文档中。
try {
// 创建一个xml写入流,将生成的xml文件写入指定的文件中
// 使用优雅的方式写入(一共有三种方式:普通方式,优雅方式和紧凑方式)
//紧凑方式写入format = OutputFormat.createCompactFormat();
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter output = new XMLWriter(
new FileWriter(new File("books.xml")), format);
output.write(document);
output.close();
}
catch (IOException e) {
System.out.println(e.getMessage());
}
}
// 使用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) { }
}
}
/**读取XML格式的字符串,根据属性来查找值
* @param xmlStr 是要解析的xml格式的字符串
* @param name 是在xml字符串中要获得标签属性
* @return 返回的标签属性是name的值
*/
public String myParseXMLStr(String xmlStr, String name){
String value = "";
StringReader sr = new StringReader(xmlStr);
InputSource is = new InputSource(sr);
SAXBuilder sb = new SAXBuilder();
try{
Document d = sb.build(is);
Element e = d.getRootElement();
value = e.getChild(name).getValue();
}catch(JDOMException e){
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}
return value;
}
import java.io.StringReader;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;
网上自己下个jdom.jar的包。