saxparser.parse
时间: 2023-08-26 09:06:00 浏览: 49
saxparser.parse是一个方法,用于解析XML文档。它是基于事件驱动的解析器,逐行读取XML文档并触发相应的事件处理器来处理XML的各个部分。这个方法需要一个XML输入源(可以是文件、输入流等)以及一个事件处理器来处理XML中的元素和属性。通过调用saxparser.parse方法,你可以解析XML文档并按照自定义的逻辑来处理其中的内容。
相关问题
org.xml.sax.SAXParseException; systemId: file:/D:/app.uix; lineNumber: 1; columnNumber: 1; 文件提前结束。 at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203) at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1437) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1019) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:327) at javax.xml.parsers.SAXParser.parse(SAXParser.java:328) at com.android.uiautomator.tree.UiHierarchyXmlLoader.parseXml(UiHierarchyXmlLoader.java:130) at com.android.uiautomator.UiAutomatorModel.<init>(UiAutomatorModel.java:51) at com.android.uiautomator.actions.OpenFilesAction.run(OpenFilesAction.java:55) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:452) at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source) at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source) at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source) at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at com.android.uiautomator.UiAutomatorViewer.main(UiAutomatorViewer.java:78) null rootnode after parsing.
这个错误是由于解析XML文件时出现了问题导致的。具体来说,这个错误表示在解析名为 "D:/app.uix" 的文件时,出现了文件提前结束的情况。这可能是由于XML文件格式不正确或者文件内容存在问题所引起的。
要解决这个问题,你可以尝试以下几个步骤:
1. 检查XML文件的格式是否正确。确保所有的标签都有正确的开闭符号,并且没有缺失或多余的标签。
2. 检查XML文件的内容是否完整。确保没有任何部分被意外地删除或截断。
3. 如果可能的话,尝试使用其他工具或方法来解析XML文件,以确认问题是否与解析器本身有关。
如果以上步骤都没有解决问题,可能需要进一步检查代码和环境设置,以确定是否存在其他原因导致该错误。
希望这些信息对你有帮助!如果你有任何其他问题,请随时问我。
给下边的代码生成执行耗时统计:public class BookstoreBuilder { public Bookstore parseDocument(InputStream inputStream) { Bookstore bookstore = new Bookstore(); try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { private BookBuilder bookBuilder; private String currentElement; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { switch (qName) { case "book": bookBuilder = new BookBuilder(); bookBuilder.setCategory(attributes.getValue("category")); break; case "title": case "author": case "year": case "price": currentElement = qName; break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { switch (qName) { case "book": bookstore.addBook(bookBuilder.build()); bookBuilder = null; break; case "title": case "author": case "year": case "price": currentElement = null; break; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (currentElement != null) { String value = new String(ch, start, length); switch (currentElement) { case "title": bookBuilder.setTitle(value); break; case "author": bookBuilder.setAuthor(value); break; case "year": bookBuilder.setYear(Integer.parseInt(value)); break; case "price": bookBuilder.setPrice(Double.parseDouble(value)); break; } } } }; saxParser.parse(inputStream, handler); } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } return bookstore; } }
可以使用Java自带的System.nanoTime()方法来计算代码执行时间,计算方法如下:
public class BookstoreBuilder {
public Bookstore parseDocument(InputStream inputStream) {
Bookstore bookstore = new Bookstore();
long startTime = System.nanoTime(); // 开始时间
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
private BookBuilder bookBuilder;
private String currentElement;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
switch (qName) {
case "book":
bookBuilder = new BookBuilder();
bookBuilder.setCategory(attributes.getValue("category"));
break;
case "title":
case "author":
case "year":
case "price":
currentElement = qName;
break;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
switch (qName) {
case "book":
bookstore.addBook(bookBuilder.build());
bookBuilder = null;
break;
case "title":
case "author":
case "year":
case "price":
currentElement = null;
break;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (currentElement != null) {
String value = new String(ch, start, length);
switch (currentElement) {
case "title":
bookBuilder.setTitle(value);
break;
case "author":
bookBuilder.setAuthor(value);
break;
case "year":
bookBuilder.setYear(Integer.parseInt(value));
break;
case "price":
bookBuilder.setPrice(Double.parseDouble(value));
break;
}
}
}
};
saxParser.parse(inputStream, handler);
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
long endTime = System.nanoTime(); // 结束时间
System.out.println("执行耗时:" + (endTime - startTime) + "ns"); // 输出执行时间
return bookstore;
}
}
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![java](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)