gpt4 book ai didi

java - 如何向用户报告丢失的DTD文件?

转载 作者:行者123 更新时间:2023-12-03 08:59:37 25 4
gpt4 key购买 nike

给定代码:

public class ModelHandler
{
//members
private DocumentBuilderFactory m_domFactory;
private DocumentBuilder m_builder;
private Document m_doc;
private XPathFactory m_factory;
private List<String> m_inputErrorLog;


public void openXmlFile(File file)
{

this.m_inputErrorLog = new LinkedList<String>() ;

try
{
m_builder = m_domFactory.newDocumentBuilder();
}

catch (ParserConfigurationException ex) { m_inputErrorLog.add(ex.getMessage());}


try
{
m_doc = m_builder.parse(file);
}
catch (Exception ex)
{
m_inputErrorLog.add(ex.getMessage());
m_domFactory.setValidating(false);
}

try
{
getNodesList("/"+m_doc.getDocumentElement().getNodeName());
}
catch (XPathExpressionException ex) {
m_inputErrorLog.add(ex.getMessage());
}
}

我想向用户显示 DTD时缺少 GUI文件。

尝试打开 XML文件时该怎么做?

谢谢

最佳答案

对于有一天可能需要它的任何人,这是解决方案:

import java.io.IOException;
// DOM
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
// SAX
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;

import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.InputSource;

public class XMLUtils {

private XMLUtils() {}

// validate using DOM (DTD as defined in the XML)
public static boolean validateWithDTDUsingDOM(String xml)
throws ParserConfigurationException, IOException
{
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);

DocumentBuilder builder = factory.newDocumentBuilder();

builder.setErrorHandler(
new ErrorHandler() {
public void warning(SAXParseException e) throws SAXException {
System.out.println("WARNING : " + e.getMessage()); // do nothing
}

public void error(SAXParseException e) throws SAXException {
System.out.println("ERROR : " + e.getMessage());
throw e;
}

public void fatalError(SAXParseException e) throws SAXException {
System.out.println("FATAL : " + e.getMessage());
throw e;
}
}
);
builder.parse(new InputSource(xml));
return true;
}
catch (ParserConfigurationException pce) {
throw pce;
}
catch (IOException io) {
throw io;
}
catch (SAXException se){
return false;
}
}


// validate using SAX (DTD as defined in the XML)
public static boolean validateWithDTDUsingSAX(String xml)
throws ParserConfigurationException, IOException
{
try {

SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);

SAXParser parser = factory.newSAXParser();

XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(
new ErrorHandler() {
public void warning(SAXParseException e) throws SAXException {
System.out.println("WARNING : " + e.getMessage()); // do nothing
}

public void error(SAXParseException e) throws SAXException {
System.out.println("ERROR : " + e.getMessage());
throw e;
}

public void fatalError(SAXParseException e) throws SAXException {
System.out.println("FATAL : " + e.getMessage());
throw e;
}
}
);
reader.parse(new InputSource( xml ));
return true;
}
catch (ParserConfigurationException pce) {
throw pce;
}
catch (IOException io) {
throw io;
}
catch (SAXException se){
return false;
}
}

public static void main (String args[]) throws Exception{

System.out.println(XMLUtils.validateWithDTDUsingDOM("c:/temp/howto.xml"));
System.out.println(XMLUtils.validateWithDTDUsingSAX("c:/temp/howto.xml"));
/*
output :
true
true
*/
}
}

关于java - 如何向用户报告丢失的DTD文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941891/

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