<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节点的所有属性和值,困惑。

解决方案 »

  1.   

    找一些xml解析的例子,或者找xpath的例子。
      

  2.   

    there're some many XML parse program for you to use.
    you can just search them on google,just like DOM,SAX.
    简单的XML文件在解析的时候,可以自己去罗列,但是复杂的XML文件的解析,自己来做逻辑够你吃一壶的
      

  3.   


    这就是传说中的XML啊?!以前都不知道呢......不是说Sax一个人搞半个月就可以实现一个吗?
      

  4.   

    students.xml文件:<?xml version="1.0" encoding="gb2312" ?>
    <!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开发详细》,孙鑫著。
      

  5.   

    如果是自己写的简单的DTD,读取xml开发还是蛮快的吧
      

  6.   

    package com.xml;import java.io.File;
    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");
    }}