如何使用Java解析此XML?

时间:2011-05-10 08:40:54

标签: java xml

<company>
   <company-name>xyz</company-name>
   <city>HYD</city>
   <company-name>ABC</company-name>
   <city>MUMBAI</city>
</company>

如何使用Java从此xml文件中获取值。在我的文件中,我重复了子节点。

6 个答案:

答案 0 :(得分:3)

我非常喜欢JAXB。只需为XML文件定义XML-Schema文件,然后使用Java工具xjc。您可以获得bean,并轻松地将XML文件绑定到对象图。谷歌是你的朋友:)

答案 1 :(得分:2)

也许你可以试试XPath

答案 2 :(得分:2)

这是一个基于Java SAX API的简单解决方案

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Main {
  public static void main(String[] args) throws Exception {
    SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser saxParser = factory.newSAXParser();
      MyHandler myHandler = new MyHandler();
      saxParser.parse(new File("g:/temp/x.xml"), myHandler);

      for(Pair p : myHandler.result) {
        System.out.println(p.a + ":" + p.b);
      }
  }

  public static final class Pair {
    public final String a;
    public final String b;

    public Pair(String a, String b) {
      this.a = a;
      this.b = b;
    }
  }

  public static class MyHandler extends DefaultHandler {    
    public final List<Pair> result = new ArrayList<Pair>();
    private StringBuilder sb = new StringBuilder();

    @Override
    public void endElement(String uri, String localName, String qName)
        throws SAXException {
      String s = sb.toString().trim();
      if(s.length() > 0)
        result.add(new Pair(qName, s));
      sb = new StringBuilder();
    }

    @Override
    public void characters(char[] ch, int start, int length)
        throws SAXException {
      sb.append(ch, start, length);
    }
  }
}

答案 3 :(得分:1)

有很多XML解析器,只有google

Example

答案 4 :(得分:1)

Jdom也非常适合这项工作

答案 5 :(得分:0)

如果您的格式非常简单,可以使用readLine()/ split / Scanner。但是,许多标准XML解析器中的一个是更安全的选择。