现在用做一个后台的接口
想请问下怎么获取传过来的XML文件加以解析
给个实例看看
谢谢个位大侠

解决方案 »

  1.   

      这是用DOM解析的:import java.io.File;import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;public class DOMUtil {
    public static Document getDoc(File f){//f为xml文件
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    Document doc=null;
    try {
    DocumentBuilder builder = factory.newDocumentBuilder();

     doc= builder.parse(f);
    } catch (Exception e) {

    e.printStackTrace();
    }
    return doc;
    }}
    public class Test {
    public static void main(String[] args) {

    Document doc=DOMUtil.getDoc(new File("./User.hbm.xml"));
    Element root = doc.getDocumentElement();//得到根结点
    System.out.println(root.getTagName());
    //读结点
    /***************************************/
    NodeList children = root.getChildNodes();
    System.out.println(children.getLength());//子结点个数
    for(int i=0;i<children.getLength();i++){//遍历整个结点
    System.out.println(i+1+"->"+children.item(i));
    }
    //读结点中的值
    /***************************************/
    //知道字段
    String value=root.getAttribute("package");//得到指定结点中的某个字段
    System.out.println("package="+value);
    //不知道字段
    NamedNodeMap atts=root.getAttributes();
    System.out.println(atts.getLength());
    for(int i=0;i<atts.getLength();i++){
    Attr att = (Attr)atts.item(i);
    System.out.println((i+1)+"-->"+att.getName()+att.getValue());//得到属性名,值
    }
    }
    }
      

  2.   

    楼上的连题都不看,随便在网上找了个代码就贴上去了!byte[] buffer = new byte[128];
    int len = 0;
    InputStream inputStream = request.getInputStream();
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();

    while((len = inputStream.read(buffer)) >= 0) {
       bytes.write(buffer, 0, len);
    }
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = docFactory.newDocumentBuilder();
    StringReader reader = new StringReader(bytes.toString());
    BufferedReader br = new BufferedReader(reader);
    InputSource is = new InputSource(br);
    Document document = builder.parse(is);
    //这问题主要是如何用DocumentBuilder来解析流文件。
    //已经得到document了,下面的事情就好办了,你自己写一下吧。
    System.out.println(document.getElementsByTagName("y").item(0).getFirstChild().getNodeValue());
      

  3.   


    private Document doc; SAXReader xml_read = new SAXReader(); /**
     * 建立数据文件的读取连接
     * 
     * @return 读取成功时返回Document对象,失败则返回空
     */
    public static Document getDocument() { Document doc1 = null;
    ConfigManager xmlConfig = new ConfigManager(//获取xml文件路径
    "./servConfig/xmlConfig.ini");
    File file = new File(xmlConfig.getValue("xml_path"));
    SAXReader xml_read = new SAXReader();
    try {
    doc1 = xml_read.read(file);//读取xml文件的内容
    } catch (DocumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return null;
    }
    return doc1;//得到document.这里相当于得到数据源的连接,把它想成oracle的connection
    }//有了连接,就可以从xml获取我们需要的数据了,如以下的读取xml的一个用户数据
    /**
     * 查找用户数据,
     * 
     * @param doc
     *            要查找的数据文件
     * @param id
     *            通过用户id条件精确查询
     * 
     */
    private Element search_user(Document doc, String id) { Element root = doc.getRootElement();
    String xml_path = "/users/user[@sid='" + id + "']";//这里是源文件的路径
    Node node = root.selectSingleNode(xml_path);
    if (node != null) {//如果结点不为空
    if (node.getNodeType() == Node.ELEMENT_NODE) {
    return (Element) node;
    }
    } return null;
    }
    楼主首先要明白xml的结构语法。才能明白去解析xml的内容
      

  4.   

    用sax 回调函数
    public class Conhander implements ContentHandler { private Writer out; public Conhander(Writer out) {
    this.out = out;
    } @Override
    public void characters(char[] text, int start, int length) throws SAXException {
    // 返回xml数据 try { out.write(text, start, length);
    } catch (IOException e) {
    throw new SAXException(e);
    } }
    }
      

  5.   

        用dom4j最好
      

  6.   

        如果光读还是SAX快,楼主你想选择哪个?