0

私は以下のようなxmlを持っています。

<Employees>
      <Employee id="1">Chuck</Employee>
      <Employee id="2">Al</Employee>
      <Employee id="3">Kiran</Employee>
</Employees>

XML には膨大な数の従業員が含まれています。簡単にするために言及しただけです。

この xml を解析してマップに入力する最良の方法は何ですか? マップには ID と名前のペアが含まれている必要があります。

理解を深めるためにコードを提供してください。

4

3 に答える 3

4

XStreamの答えはたくさんのコードのようです。JDK /JREのStAXAPIを使用して、次のようなことを行うことができます。

package forum11871952;

import java.io.FileReader;
import java.util.*;
import javax.xml.stream.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        XMLInputFactory xif = XMLInputFactory.newFactory();
        XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("src/forum11871952/input.xml"));
        xsr.nextTag(); // advance to Employees tag
        xsr.nextTag(); // advance to first Employer element
        Map<String,String> map = new HashMap<String,String>();
        while(xsr.getLocalName().equals("Employee")) {
            map.put(xsr.getAttributeValue("", "id"), xsr.getElementText());
            xsr.nextTag(); // advance to next Employer element
        }
    }

}
于 2012-08-09T19:11:52.010 に答える
1

Xstreamを使用してこれを簡単にマッピングできます。

XStream xStream = new XStream(new DomDriver());
xStream.alias("Employees", Employees.class);
xStream.registerConverter(new MapEntryConverter());
employeesMap = (Map<String, String>) xStream.fromXML(queryXML);

XMLをMapオブジェクトにアンマーシャルするコンバーターを作成します

private static class MapEntryConverter implements Converter {
        public boolean canConvert(Class clazz) {
            return clazz.equals(Employees.class);
        }

        public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
            AbstractMap<String, String> map = (AbstractMap<String, String>) value;
            for (Map.Entry<String, String> entry : map.entrySet()) {
                writer.startNode(entry.getKey().toString());
                writer.setValue(entry.getValue().toString());
                writer.endNode();
            }
        }

        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
            Map<String, String> map = new HashMap<String, String>();

            while (reader.hasMoreChildren()) {
                reader.moveDown();
                map.put(reader.getAttribute(1), reader.getValue());
                reader.moveUp();
            }
            return map;
        }
    }

以下のように、EmployeesクラスとEmployeeクラスを作成します。

private class Employees{
        List<Employee> employees;
    }
    private class Employee{
        private String id;
        private String value;
}

これがあなたのために働くことを願っています。

于 2012-08-09T15:01:17.057 に答える
1

XStreamなどのライブラリを使用します。List<Employee>ここよりも似合うMap

于 2012-08-08T19:43:14.723 に答える