1

xmlをHashMapに解析する必要があります。ここで、「キー」は2つの要素属性の連結です。xmlは次のようになります:

<map>
  <parent key='p1'><child key='c1'> value1</child></parent>
  <parent key='p2'><child key='c2'> value1</child></parent>
</map>

マップの最初のエントリで、「p1.c1」をマップキーとして、「value1」をマップ値として配置します。それを達成する方法は?

4

4 に答える 4

1

Apacheの一般的なダイジェストは実際には完全なパーサーではなく、非常に遅い場合があります...大きなXMLドキュメントを処理する必要がある場合は、最大256GBのXMLをサポートする拡張VTD-XMLも確認する必要があります。メモリマップをサポートし、XmLドキュメントの部分的なロードを可能にします

于 2009-10-03T19:28:32.340 に答える
1

Xstreamを使用した例(http://x-stream.github.io/)。XML仕様に完全には準拠していません。ネストされた<value>タグをタグに追加しました<child>

出力:

<map>
  <parent key="p1">
    <child key="c1">
      <value>value1</value>
    </child>
  </parent>
  <parent key="p2">
    <child key="c2">
      <value>value1</value>
    </child>
  </parent>
</map>
p1.c1=value1
p2.c2=value1

これは役に立ちますか?それ以外の場合はフォローアップしてください。

import java.util.HashMap;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

public class MapParser {

    public static void main(String[] args) {

        XStream xstream = new XStream(new DomDriver());
        xstream.alias("map", Map.class);
        xstream.addImplicitCollection(Map.class, "parents");
        xstream.alias("parent", Parent.class);
        xstream.useAttributeFor(Parent.class, "key");
        xstream.alias("child", Child.class);
        xstream.useAttributeFor(Child.class, "key");

        Map map = (Map) xstream
                .fromXML("<map><parent key='p1'><child key='c1'><value>value1</value></child></parent><parent key='p2'><child key='c2'><value>value1</value></child></parent></map>");

        System.out.println(xstream.toXML(map));

        java.util.Map result = new HashMap();
        for (Parent parent : map.getParents()) {

            Child child = parent.getChild();
            String key = parent.getKey() + "." + child.getKey();
            result.put(key, child.getValue());
            System.out.println(key + "=" + child.getValue());
        }
    }
}


import java.util.ArrayList;
import java.util.List;

public class Map {

    private List<Parent> parents = new ArrayList<Parent>();

    public void addParent(Parent parent) {
        parents.add(parent);
    }

    public List<Parent> getParents() {
        return this.parents;
    }
}

public class Parent {

    private String key;
    private Child child;

    public Parent(String key) {
        this.key = key;
    }

    public Child getChild() {
        return child;
    }

    public void setChild(Child child) {
        this.child = child;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }
}


public class Child {

    private String key;
    private String value;

    public Child(String key) {
        this.key = key;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
于 2009-10-03T20:34:35.790 に答える
1

解決しました。ユーザー拡張ハッシュマップルール。

于 2009-10-06T19:36:19.973 に答える
0

XMLパーサーの選択と使用に問題がありますか?

于 2009-10-03T16:17:57.650 に答える