gpt4 book ai didi

java - 抛出 SAXException

转载 作者:行者123 更新时间:2023-12-01 11:33:47 26 4
gpt4 key购买 nike

学习使用 Java 进行 xml 解析,并且正在编写一个测试程序来尝试各种东西。所有测试 System.out.println() 都是我在控制台中所期望的,除了 childElement 返回 [name: null] 和 childElement.getNodeValue() 返回 null 而不是 [name: "Branch Name"] 和 "分行名称”分别。

为了纠正这个问题,我开始调整,当然进一步破坏了程序。现在,当我尝试运行时,我抛出一个 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);

希望这有帮助!

祝你好运!

关于java - 抛出 SAXException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30205209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com