我是XMLParsing的新手。 它今天坐在工作中,无需解析文件并将其放入arrayList。
我的文件看起来有点像这样
<type>
<OBJECT_TYPE>horse</OBJECT_TYPE>
<prop>blabla</prop>
<param>black</param>
<OBJECT_TYPE>cat</OBJECT_TYPE>
<prop>blabla</prop>
<param>black</param>
<OBJECT_TYPE>car</OBJECT_TYPE>
<prop>blabla</prop>
<param>black</param>
</type>
但是很长时间而不是那个内容。 我尝试使用SaxParser但没有成功。 而且我已经阅读了几乎所有的SaxParser版本,但是所有解析xml都具有属性,而且我的XML没有任何属性。
那么对于这种XML,我应该使用哪种解析器将其保存到ArrayList中? 而且我只想列出我的OBJECT_TYPES。没有道具也没有参数。
答案 0 :(得分:1)
SAX解析这种格式的标准模式是
startElement
OBJECT_TYPE
,则创建一个新缓冲区(例如StringBuilder)以收集字符数据。characters
endElement
OBJECT_TYPE
,则将缓冲区转换为字符串并执行您需要执行的任何操作。解析器会将元素的文本内容传递给处理程序的characters
方法,但不能保证在一个块中为您提供整个连续文本块,这就是为什么需要累积它在缓冲区中并在endElement
进行处理。
答案 1 :(得分:1)
这就是
的方式import java.util.ArrayList;
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 ReadXMLFile {
public static void main(String argv[]) {
final ArrayList<String> al=new ArrayList<String>();
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
boolean bfname = false;
boolean blname = false;
boolean bnname = false;
boolean bsalary = false;
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
System.out.println("Start Element :" + qName);
if (qName.equalsIgnoreCase("OBJECT_TYPE")) {
bfname = true;
}
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
System.out.println("End Element :" + qName);
}
public void characters(char ch[], int start, int length) throws SAXException {
if (bfname) {
al.add(new String(ch, start, length));
bfname = false;
}
}
};
saxParser.parse("C:\\Users\\Naren\\workspace\\Regex\\src\\test.xml", handler);
System.out.println(al);
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出
[马,猫,车]
答案 2 :(得分:0)
这就是我解决它的方法:
public void ParserForObjectTypes() throws SAXException, IOException,
ParserConfigurationException {
try {
FileInputStream file = new FileInputStream(new File(
"xmlFiles/CoreDatamodel.xml"));
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(file);
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//OBJECT_TYPE";
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(
xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
model.addElement(nodeList.item(i).getFirstChild()
.getNodeValue());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}