抛出SAXException
学习使用Java进行xml解析,并且正在测试程序中工作,以便随时进行尝试。 除了childElement返回[name:null]和childElement.getNodeValue()返回null而不是[name:“Branch Name”]和“返回值”之外,所有测试System.out.println()分支名称“。
为了纠正这种情况,我开始进行调整,当然还要进一步破坏程序。 现在,我抛出了一个SAXException(我已经标出了我已经缩小到注释的范围,尽管我没有完全清楚SAXException意味着什么等),当我尝试运行时,我可以似乎没有让她回到她以前的地方。
以下是现在的代码:
package uploaders;
import javax.swing.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.awt.EventQueue;
import java.io.*;
public class Test {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
JFileChooser chooser = new JFileChooser();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
StringBuilder xmlStringBuilder = new StringBuilder();
String appendage = "<?xml version="1.0"?><branch0><name>Branch Name</name></branch0>";
ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder.toString().getBytes("UTF-8"));
chooser.setCurrentDirectory(new File("."));
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
System.out.println("Test Results:");
System.out.println();
System.out.println(chooser.getSelectedFile().getPath());
Document doc = builder.parse(input); //originally org.w3c.dom.Document...this line is where SAXException is thrown.
Element root = doc.getDocumentElement();
NodeList children = root.getChildNodes();
System.out.println(root.getTagName());
xmlStringBuilder.append(appendage); //forgot to move this up too (thanks @Vihar)
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child instanceof Element) {
Element childElement = (Element) child;
System.out.println(childElement.getTagName());
System.out.println(childElement.getNodeValue());
System.out.println(childElement); }
}
}
}
}
任何有关SAXException的帮助都非常感谢,之后我仍然可能需要弄清楚为什么“name”元素返回“null”,但首先要做的事情是:)。
更新在注释中显示什么导致了SAXException。 控制台仍然显示这个:
Test Results:
/Users/.../Documents/java/Test/./bin
branch0
name
null //I'm expecting "Branch Name"
[name: null] //and "[name: Branch Name]"
最后
childElement.getNodeValue() //needed + .toString() to work or:
childElement.getNodeValue().toString()
要么
childElement.getTextContent()
问题在于此
ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder.toString().getBytes("UTF-8"));
你刚刚创建了一个StringBuilder(xmlStringBuilder)的空对象,并期望解析它,所以编译器会抛出一个SAXParseException
但你真的需要这样做
ByteArrayInputStream input = new ByteArrayInputStream(appendage.toString().getBytes("UTF-8"));
因为你的appendage
字符串包含了实际的xml信息
或者这样做
xmlStringBuilder.append(appendage); //I have just changed the sequence of these lines in your code
ByteArrayInputStream input = new ByteArrayInputStream(xmlStringBuilder.toString().getBytes("UTF-8"));
Document doc = builder.parse(input);
希望这可以帮助!
祝你好运!
链接地址: http://www.djcxy.com/p/5955.html下一篇: SAXException: Content is not allowed in trailing section