【发布时间】:2019-02-18 10:27:31
【问题描述】:
如何“强制”解析器方法使用第二个文件并制作第二个地图?
我对 1 个文件进行了 xml 解析和映射 (LinkedHashMap)。
我怎样才能对其他文件做同样的事情?
在我的代码中,您可以找到 2 个解析器实例,2 个linkedHashMap。
但是方法只适用于 1 个文件,因为我不知道如何指向使用其他文件的方法。
到目前为止我的代码是:
package xml_strings;
import java.util.LinkedHashMap;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ReadingResourcesWithSax {
static LinkedHashMap<String, String> mapaEn = new LinkedHashMap<String, String>();
static LinkedHashMap<String, String> mapaPl = new LinkedHashMap<String, String>();
public static void main(String[] args) throws Exception {
XmlHandler xmlHandler = new XmlHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
saxParser.parse("strings1.xml", xmlHandler);
SAXParser saxParser1 = factory.newSAXParser();
saxParser1.parse("strings2.xml", xmlHandler);
for (String key : mapaEn.keySet()) {
System.out.print(key + "\n");
System.out.println("<" + mapaEn.get(key) + ">\n");
}
}
private static class XmlHandler extends DefaultHandler {
private boolean insideStringItem;
private String a, b, c;
private int i = 0;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equals("string")) {
insideStringItem = true;
a = attributes.getValue("name");
}
else if (qName.equals("string-array")) {
insideStringItem = true;
a = attributes.getValue("name");
c = a;
} else if (qName.equals("item")) {
insideStringItem = true;
a = c + "###" + i;
i++;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (insideStringItem) {
insideStringItem = false;
b = new String(ch, start, length);
mapaEn.put(a, b);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("string-array")) {
i = 0;
}
}
}
}
【问题讨论】: