<command name="name1" class="path" >
<alias desc="alias-desc">
</alias>
<variable flag="attr">
<format desc="attr-desc">flag of alias of attribute</format>
</variable>
<reg-context>
Regular expression for command
</reg-context>
</command>上面的xml中怎样解析出alias,variable,reg-context节点的所有属性和值,困惑。
you can just search them on google,just like DOM,SAX.
简单的XML文件在解析的时候,可以自己去罗列,但是复杂的XML文件的解析,自己来做逻辑够你吃一壶的
这就是传说中的XML啊?!以前都不知道呢......不是说Sax一个人搞半个月就可以实现一个吗?
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student sn ID #REQUIRED>
]>
<students>
<student sn="01">
<name>张三</name>
<age>18</age>
</student>
<student sn="02">
<name>李四</name>
<age>20</age>
</student>
<student sn="03">
<name>王五</name>
<age>52.4</age>
</student>
</students>import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
public class DOMStudentsInf{
public static void main(String[] args){
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try{
System.out.println(dbf.getClass().getName());
DocumentBuilder db=dbf.newDocumentBuilder();
File f=new File("students.xml");
Document doc=db.parse(f);
NodeList nl=doc.getElementsByTagName("student");
int len=nl.getLength();
for(int i=0;i<len;i++){
Element eltStu=(Element)nl.item(i);
Node eltName=eltStu.getElementsByTagName("name").item(0);
Node eltAge=eltStu.getElementsByTagName("age").item(0);
String name=eltName.getFirstChild().getNodeValue();
String age=eltAge.getFirstChild().getNodeValue();
System.out.println("±àºÅ£º"+" "+eltStu.getAttribute("sn"));
System.out.println("ÐÕÃû£º"+" "+name);
System.out.println("ÄêÁ䣺"+" "+age);
System.out.println("-------------------");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
如需了解更多的话,例如像修改、删除、添加XML文件数据,请参考《JAVA WEB开发详细》,孙鑫著。
import java.net.MalformedURLException;
import java.util.Iterator;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;public class Parsexml { //写死的解析
@SuppressWarnings({ "unchecked", "unchecked" })
public static void parse(String filePath){
SAXReader reader=new SAXReader(); try {
Document document=reader.read(new File(filePath));
Element element=document.getRootElement();
Iterator<Element> alias=element.elementIterator("alias");
while(alias.hasNext())
{
Element e=alias.next();
System.out.println(e.attributeValue("desc")); }
Iterator<Element> variable=element.elementIterator("variable");
while(variable.hasNext())
{
Element e=variable.next();
System.out.println(e.attributeValue("flag"));
Element e2=e.element("format");
System.out.println(e2.attributeValue("desc")+" 内容 "+e2.getText()); }
Iterator<Element> reg_context=element.elementIterator("reg-context");
while(reg_context.hasNext())
{
Element e=reg_context.next();
System.out.println("内容 "+e.getText()); }
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
//通用解析
@SuppressWarnings("unchecked")
public static void commonParse(String filePath)
{
int count=1;
SAXReader reader=new SAXReader();
OutputFormat of=OutputFormat.createPrettyPrint();
of.setEncoding("GBK");
try {
Document document=reader.read(new File(filePath));
Element element=document.getRootElement();
Iterator<Element> its=element.elementIterator();
while(its.hasNext())
{
Element e1=its.next();
System.out.println("父标签"+count+":"+e1.getName());
for(int i=0;i<e1.attributeCount();i++){
System.out.println(" 属性名"+i+":"+e1.attribute(i).getName()+" 属性值"+i+":"+encodingFilter(e1.attribute(i).getValue()));
}
System.out.println(" 标签值"+count+":"+encodingFilter(e1.getText()));
parseElment(e1);
count++; }
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static void parseElment(Element element)
{
Iterator<Element> its=element.elementIterator();
int count=1;
while(its.hasNext())
{
Element e1=its.next(); System.out.println("子标签"+count+":"+e1.getName()+" 属性个数: "+e1.attributeCount());
for(int i=0;i<e1.attributeCount();i++)
{
Attribute attr=e1.attribute(i);
System.out.println("属性名"+i+":"+attr.getName()+" 属性值"+i+":"+encodingFilter(attr.getValue()));
}
System.out.println(" 标签值"+count+":"+encodingFilter(e1.getText()));
count++;
parseElment(e1); }
}
public static String encodingFilter(String str)
{
String s=str;
// try {
// s=new String(s.getBytes("GBK"),"UTF-8");
// } catch (UnsupportedEncodingException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
return s;
}
public static void main(String[] args) { //parse("F:\\Eclipseworkspace\\Struts2SH\\src\\test1.xml");
commonParse("F:\\Eclipseworkspace\\Struts2SH\\src\\test2.xml");
}}