解析XML以在java中映射

解析XML以在java中映射,java,map,xml-parsing,hashmap,Java,Map,Xml Parsing,Hashmap,我有XML,我想解析它来映射它。但由于缺乏java知识,我无法做到这一点。 我的XML格式是这样的 <configuration> <config name="name1" type="main" format="xyz-D" size=1 scale=2 required=no/> <config name="name2" type="sub" format="xyz-E" size=12 scale=5 required=no/> <conf

我有XML,我想解析它来映射它。但由于缺乏java知识,我无法做到这一点。 我的XML格式是这样的

<configuration>    
<config name="name1" type="main" format="xyz-D" size=1 scale=2 required=no/>
<config name="name2" type="sub" format="xyz-E" size=12 scale=5 required=no/>
<config name="name3" type="last" format="xyz-C" size=2 scale=1 required=no/>
<config name="name4" type="first" format="xyz-S" size=16 scale=3 required=no/>
<config name="name5" type="main" format="xyz-S" size=17 scale=2 required=no/>
<config name="name6" type="main" format="xyz-S" size=18 scale=2 required=no/>
<config name="name7" type="first" format="xyz-S" size=23 scale=4 required=no/>
<config name="name8" type="last" format="xyz-S" size=45 scale=2 required=no/>
<config name="name9" type="sub" format="xyz-s" size=39 scale=15 required=no/>
<configuration/> 


如何将其转换为in-MAP,以便用于后面的操作

下面是构建与每个
元素对应的
Config
对象的代码。即兴将这些对象添加到
列表
地图

import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class ConfigImporter
{
    private static String cfgXml = "<configuration> <config name='name1' type='main' format='xyz-D' size='1' scale='2' required='no'/> <config name='name2' type='sub' format='xyz-E' size='12' scale='5' required='no'/> <config name='name3' type='last' format='xyz-C' size='2' scale='1' required='no'/> <config name='name4' type='first' format='xyz-S' size='16' scale='3' required='no'/> <config name='name5' type='main' format='xyz-S' size='17' scale='2' required='no'/> <config name='name6' type='main' format='xyz-S' size='18' scale='2' required='no'/> <config name='name7' type='first' format='xyz-S' size='23' scale='4' required='no'/> <config name='name8' type='last' format='xyz-S' size='45' scale='2' required='no'/> <config name='name9' type='sub' format='xyz-s' size='39' scale='15' required='no'/> </configuration>";

    public static void main(String[] args)
    {
        try
        {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(new InputSource(new StringReader(cfgXml)));

            // optional, but recommended
            // read this -
            // http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            NodeList nList = doc.getElementsByTagName("config");

            System.out.println("----------------------------");

            for (int temp = 0; temp < nList.getLength(); temp++)
            {

                Node nNode = nList.item(temp);

                System.out.println("\nCurrent Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE)
                {

                    Element eElement = (Element) nNode;

                    Config c = new Config();

                    c.name = eElement.getAttribute("name");
                    c.type = eElement.getAttribute("type");
                    c.format = eElement.getAttribute("format");
                    c.size = Integer.valueOf(eElement.getAttribute("size"));
                    c.scale = Integer.valueOf(eElement.getAttribute("scale"));
                    String attribute = eElement.getAttribute("required");

                    c.required = Boolean.valueOf("Yes".equalsIgnoreCase(attribute) ? true : false);

                    System.out.println("Imported config : " + c);
                }
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static class Config
    {
        @Override
        public String toString()
        {
            return "Config [name=" + name + ", type=" + type + ", format=" + format + ", size=" + size + ", scale=" + scale + ", required="
                    + required + "]";
        }

        public String name;
        public String type;
        public String format;
        public int size;
        public int scale;
        public boolean required;
    }
}
导入java.io.StringReader;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.Element;
导入org.w3c.dom.Node;
导入org.w3c.dom.NodeList;
导入org.xml.sax.InputSource;
公共类配置导入器
{
私有静态字符串cfgXml=“”;
公共静态void main(字符串[]args)
{
尝试
{
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(新的InputSource(新的StringReader(cfgXml));
//可选,但推荐
//读这个-
// http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList nList=doc.getElementsByTagName(“配置”);
System.out.println(“-------------------------------”;
对于(int-temp=0;temp
这个问题可能是正确的起点:(我认为你的问题太笼统了)。请尝试查看以下链接:。对你来说,我认为DOM会很好()。如果您认为DOM不是您想要的,请尝试看一看SAX()。我正在寻找将给定XML转换为列表的解决方案,是否有人知道如何做?@Java SAX对于我们现在拥有的任何人都没有好处。另外,除非输入文件是巨大的,否则DOM或是要走的路,或者Maaybe JAXB,但对于这样一个简单的用例来说,它可以说是矫枉过正的。@millimoose我同意。SAX非常简单,现在也不是很有用,但我可以想象,OP在尝试将数据放入映射时,不会希望使用像StAX这样的拉式解析器来请求下一个事件。正如您所说,DOM或JDOM最好,除非文件很大。