【问题标题】:How to parse this XML using Java?如何使用 Java 解析这个 XML?
【发布时间】:2011-05-10 08:40:54
【问题描述】:
<company>
   <company-name>xyz</company-name>
   <city>HYD</city>
   <company-name>ABC</company-name>
   <city>MUMBAI</city>
</company>

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

【问题讨论】:

  • 您是否尝试过使用常见的解析器,例如 dom4j 或 SAX?

标签: java xml


【解决方案1】:

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

【讨论】:

  • 您还可以从 Java 类开始,并通过注释将它们映射到 XML(不需要架构)。此外,由于 JAXB 是一种标准 (JSR-222),因此有多种 JAXB 实现可供选择:Metro(参考实现、EclipseLink MOXy、Apache JaxMe。
【解决方案2】:

也许你可以试试XPath

【讨论】:

    【解决方案3】:

    这是一个基于 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);
        }
      }
    }
    

    【讨论】:

      【解决方案4】:

      那里有许多 XML 解析器,只需 google 即可。

      Example

      【讨论】:

        【解决方案5】:

        Jdom 也是这项工作的一个很好的候选人

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 2011-08-22
            • 1970-01-01
            • 1970-01-01
            • 2012-02-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多