[英]SAXParseException occurrs in my program
我编写了一个程序来读取一组源文件,并使用SrcML工具将其转换为XML文件。 基本上程序如下。
for (------------------) {
-------------------
String xmlUri = GetXmlFile(sourceFileUri); // create xml file and get its uri
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlUri);
-------------------
}
对于每个源文件,程序都会在同一位置创建一个XML文件(通过覆盖以前创建的文件)并读取XML文件。 对于某些源文件,此过程可以正常工作。 但是它们大多数都提供了一些SAX Parse异常,如下所示:
SrcML工具创建有效的XML文档。 当我检查XML文件中的某些异常时,它没有显示格式有任何问题。 所有异常均指向代码中的同一行,即:
"Document doc = dBuilder.parse(xmlUri);"
我在大量讨论以及其他论坛中经历了与该主题相关的许多讨论。 两者都没有提供解决此问题的线索。
如果有人可以帮助我解决这个问题,我非常感谢。 谢谢。
private static Document GetXmlDom(String xmlFilePath)
throws SAXException, ParserConfigurationException, IOException {
File tempFile;
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFilePath);
if (doc.hasChildNodes()) {
return doc;
}
}
catch (IOException e) {
e.printStackTrace();
throw e;
}
catch (SAXParseException e) {
e.printStackTrace();
throw e;
}
return null;
}
private static String GetXmlFile(String inputFile) throws IOException {
if (new File(inputFile).isFile()) {
String outFile = FileNameHandler.GetNextNumberedFileName(FileNameHandler.getXmlFlePath(), "outFile.xml");
Process process = new ProcessBuilder("srcML\\src2srcml.exe", inputFile,
"-o", outFile).start();
return outFile;
}
else {
System.out.println("\nNo XML file is created. File does not exist: " + inputFile);
}
return null;
}
public static List<Tag> SourceToXML(String inputFile)
throws SAXException, ParserConfigurationException, IOException {
List<Tag> tagList = new LinkedList<Tag>();
String xmlUri = GetXmlFile(inputFile);
Document doc = GetXmlDom(xmlUri);
if (doc != null) {
LinkedList<Integer> id = new LinkedList<Integer>();
id.add(1);
TagHierarchy.CreateStructuredDom(new TagId(id), doc.getFirstChild(), tagList);
tagList.get(0).setAncestor(null);
TagHierarchy.SetTagHierarchy(tagList);
}
return tagList;
}
[严重错误] outFile.xml:461:300:元素类型“ argcl”必须由匹配的结束标记“”终止。 org.xml.sax.SAXParseException; systemId:文件:/ E:/srcML/Output/outFile.xml; lineNumber:461; columnNumber:300; 元素类型“ argcl”必须以匹配的结束标记“”终止。 在com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(未知源)在com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(未知源)在com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(未知源) vocab.util.file.FileConverter.SourceToXML(FileConverter.java:188)处的vocab.CodeVocabulary.Create(CodeVocabulary.java:59)处的vocab.CodeVocabulary。(CodeVocabulary.java:53)处的。在vocab.TestMain.main(TestMain.java:57)的vocab.util.DataAcccessUtil.GetCodeVocabularies(DataAcccessUtil.java:331)
似乎您正在启动一个生成XML文件的过程,然后直接读取生成的文件。 这意味着解析器将在进程运行时读取文件并写入同一文件。 因此,解析器将看不到完整的生成文件。
您应该等待该过程完成,然后再读取它生成的文件。
您还应该遵守Java命名约定:方法以小写字母开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.