0
大規模なxmlファイルにsaxパーサーを使用したい。saxの解析 - ネストされたタグをメインタグにマッピング
DefaultHandler handler = new DefaultHandler() {
String temp;
HashSet <String> xml_Elements = new LinkedHashSet <String>();
HashMap < String, Boolean > xml_Tags = new LinkedHashMap < String, Boolean >();
HashMap < String, ArrayList <String>> tags_Value = new LinkedHashMap < String, ArrayList <String>>();
//###startElement#######
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
xml_Elements.add(qName);
for (String tag: xml_Elements) {
if (qName == tag) {
xml_Tags.put(qName, true);
}
}
}
//###########characters###########
public void characters(char ch[], int start, int length) throws SAXException {
temp = new String(ch, start, length);
}
//###########endElement############
public void endElement(String uri, String localName,
String qName) throws SAXException {
if (xml_Tags.get(qName) == true) {
if (tags_Value.containsKey(qName)) {
tags_Value.get(qName).add(temp);
tags_Value.put(qName, tags_Value.get(qName));
} else {
ArrayList <String> tempList = new ArrayList <String>();
tempList.add(temp);
//tags_Value.put(qName, new ArrayList<String>());
tags_Value.put(qName, tempList);
}
//documentWriter.write(qName+":"+temp+"\t");
for (String a: tags_Value.keySet()) {
try {
documentWriter.write(tags_Value.get(a) + "\t");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
xml_Tags.put(qName, false);
}
tags_Value.clear();
}
};
私のXMLはのようなものです:私は、各AのタグA. すなわち下にあるすべてのネストされたタグをクラスタ化したかった
<TermInfo>
<A>1/f noise</A>
<B>Random noise</B>
<C>Accepted</C>
<D>Flicker noise</D>
<F>Pink noise</F>
<I>1-f</I>
<I>1/f</I>
<I>1/f noise</I>
<I>1:f</I>
<I>flicker noise</I>
<I>noise</I>
<I>pink noise</I>
<ID>1</ID>
</TermInfo>
<TermInfo>
<A>3D printing</A>
<B>Materials fabrication</B>
<C>Accepted</C>
<D>3d printing</D>
<F>2</F>
<I>three dimension*</I>
<I>three-dimension*</I>
<I>3d</I>
<I>3-d</I>
<I>3d*</I>
</TermInfo>
...そのB、C、DとIハンドラは次のようになります上記のハンドラを使用すると、出力はABCDIIなどのようになります。それぞれのAに対して1つのオブジェクトを作成し、それに他の要素を追加することはできますか?これをどのように含めることができますか。
ありがとうございました。私はこのソリューションだけのように探していました。ありがとう:) – Kaira
また、qNameにはlocalNameの代わりにqNameを指定しました。qNameから出力が得られました。これらの2つの違いは何ですか? – Kaira
正しく機能していれば正解とマークしてください。 qNameとlocalNameの違いについては、http://stackoverflow.com/questions/7157355/what-is-the-difference-between-localname-and-qnameを参照してください。これは、決して使ったことのない高度なXMLコンセプトです。 – ProgrammersBlock