标签: saxparseexception

SAXParser无法解析某些字符

我在android/java上用SAXParser等做一些简单的SAXParsing

它可以正确解析文件,但遇到某些特殊字符时会打嗝,例如,如果它解析下面的xml:

<?xml version="1.0" encoding="ISO-8859-1" ?><MTRXML version="1.0">
<GEOCODE key="pohj">
<LOC name1="Pohjantori" number="" city="Espoo" code="995" address="" type="1" category="poi" x="2544225" y="6674893" lon="24.79378" lat="60.18324" />
<LOC name1="Pohjois-Haaga" number="" city="Helsinki" code="41" address="" type="1" category="poi" x="2549164" y="6680186" lon="24.88405" lat="60.23018" />
<LOC name1="Pohjois-Leppävaara" number="" city="Espoo" code="50" address="" type="1" category="poi" x="2545057" y="6679240" lon="24.80974" lat="60.22216" />
Run Code Online (Sandbox Code Playgroud)

当它在最后一行遇到Pohjois-Leppävaara的ä时会打嗝.

它给出的错误是:

01-30 18:14:52.039: WARN/System.err(686): org.apache.harmony.xml.ExpatParser$ParseException: At line 5, column 24: not well-formed (invalid token)
Run Code Online (Sandbox Code Playgroud)

我确信SAXParser可以处理这些字符,但我相信我需要在某处设置一些编码等?

Java代码是这样的:

AXParserFactory factory = SAXParserFactory.newInstance();

    SAXParser parser = null;
    try {
        parser = factory.newSAXParser();
    } catch …
Run Code Online (Sandbox Code Playgroud)

java xml android saxparser saxparseexception

5
推荐指数
1
解决办法
2364
查看次数

cvc-complex-type.3.2.2:属性xsi:不允许schemaLocation出现在Java DOM中的<people>中

我试图通过使用DOM验证器在Java中使用XSD验证我的XML.
虽然我手动地知道该文档确实有效,但DOM验证器还是对我说:

cvc-complex-type.3.2.2: Attribute <xsi:schemaLocation> is not allowed to appear in the element <people>  
Run Code Online (Sandbox Code Playgroud)

我已经确定的是:
setNamespaceAware()被设置为true
的schemaLanguage是之前设置属性schemaSource
schemaLanguage设置为http://ww.w3.org/2001/XMLSchema
两者的XSD和XML在同一个文件夹中.java和.class文件

SSCCE

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class DOMValidator {
    String xmlInstance = null;
    String xmlSchema = null;


    public static void main(String[] args){
        DOMValidator validator = new DOMValidator();
        validator.validateXML("student.xsd",
                              "helloWorld.xml");
    }

    public void validateXML(String xsd,String xml){
        xmlSchema = xsd;
        xmlInstance = xml;
        beginValidation();
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java xml dom jaxp saxparseexception

3
推荐指数
1
解决办法
2万
查看次数

元素“Root”的命名空间必须来自架构命名空间“http://www.w3.org/2001/XMLSchema”?

我有一个 xml 文档:

<?xml version="1.0" encoding="utf-8"?>
<Root>
  <Child name="MyType" compareMode="EQ"></Child>
</Root>
Run Code Online (Sandbox Code Playgroud)

我想在以下 xsd 的帮助下验证这个 xml:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Child">
          <xs:complexType>
            <xs:attribute name="name" type="xs:string" use="required" />
            <xs:attribute name="compareMode" type="xs:string" use="required" />
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

当我尝试验证它时,我收到以下错误:

Exception in thread "main" org.xml.sax.SAXException: Validation failed against correct.xml. ErrorMessage:s4s-elt-schema-ns: The namespace of element 'Root' must be from the schema namespace, 'http://www.w3.org/2001/XMLSchema'.
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么Root必须在架构的命名空间中?那可能是我没有正确验证xml文档吗?

公共同步布尔值 isValid(String xmlFragment, File xmlSchema) 抛出 SAXException, IOException{

// …

xml validation xsd saxparseexception

2
推荐指数
1
解决办法
9977
查看次数

验证时的DTD信息和相关错误(XSD架构) - 是否可以忽略它们?

所以我有大量的XML文件.多年来,他们造成了麻烦,因为写这些人的人手工完成,所以错误自然而然地发生了.我们现在应该验证它们并在尝试使用这些XML文件时提供有关错误的反馈.

我正在使用SAX解析器并获取错误列表.

以下是我的代码

  BookValidationErrorHandler errorHandler = new BookValidationErrorHandler();

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

        SchemaFactory schemaFactory = 
            SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

        factory.setSchema(schemaFactory.newSchema(
            new Source[] {new StreamSource("test.xsd")}));


        javax.xml.parsers.SAXParser parser = factory.newSAXParser();
        org.xml.sax.XMLReader reader = parser.getXMLReader();

        reader.setErrorHandler(errorHandler);
        reader.parse(new InputSource("bad.xml"));
Run Code Online (Sandbox Code Playgroud)

前几个错误始终是:

行号:2:文档无效:未找到语法.行号:2:文档根元素"信用",必须与DOCTYPE根"null"匹配.

我们不可能去编辑需要检查的数千个XML文件.

有什么我可以轻松添加到源的前面以防止这种情况吗?有没有办法告诉解析器忽略这些与DTD相关的错误?甚至不确定语法是什么意思.我有点理解第二个意味着什么.

xml schema xsd saxparser saxparseexception

2
推荐指数
1
解决办法
2711
查看次数

SAXParseException 为 getSystemId() 返回 null

为什么 SAXParseException 为 getSystemId() 返回 null?什么是系统标识符?

    import java.io.StringReader;

    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;

    import org.xml.sax.ErrorHandler;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import org.xml.sax.XMLReader;

    public class MainClass {
      static public void main(String[] arg) throws Exception{
        boolean validate = false;

        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setValidating(validate);

        XMLReader reader = null;
          SAXParser parser = spf.newSAXParser();
          reader = parser.getXMLReader();

        reader.setErrorHandler(new MyErrorHandler());
          reader.parse(new InputSource(new StringReader(xmlString)));
    }
      static String xmlString = "<PHONEBOOK>" +
      "  <PERSON>" +
      "   <NAME>Joe Wang</NAME>" +
      "   <EMAIL>joe@yourserver.com</EMAIL>" +
      "   <TELEPHONE>202-999-9999</TELEPHONE>" +
      "   <WEB>www.java2s.com</WEB>" …
Run Code Online (Sandbox Code Playgroud)

java saxparseexception

2
推荐指数
1
解决办法
1467
查看次数

XSD验证中的SaxParseException不提供元素名称

我有一个xsd文件和一个xml文件,我正在使用以下代码对xsd文件验证xml文件

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setValidating(true);
        factory.setAttribute(
                "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
                "http://www.w3.org/2001/XMLSchema");
        factory.setAttribute(
                "http://java.sun.com/xml/jaxp/properties/schemaSource",
                new InputSource(new StringReader(xsd)));
        Document doc = null;
        try {
            DocumentBuilder parser = factory.newDocumentBuilder();
            MyErrorHandler errorHandler = new MyErrorHandler();
            parser.setErrorHandler(errorHandler);
            doc = parser.parse(new InputSource(new StringReader(xml))); 
            return true;
        } catch (ParserConfigurationException e) {
            System.out.println("Parser not configured: " + e.getMessage());
        } catch (SAXException e) {
            System.out.print("Parsing XML failed due to a "
                    + e.getClass().getName() + ":");
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println("IOException thrown");
            e.printStackTrace();
        }
        return false;
Run Code Online (Sandbox Code Playgroud)

MyErrorHanlder是

private static class …
Run Code Online (Sandbox Code Playgroud)

java xml xsd saxparseexception

2
推荐指数
1
解决办法
1万
查看次数

当我尝试在模拟器android studio上运行app时出错

我只是在android studio上构建一个应用程序,当我在模拟器上运行它时出现错误代码.需要你的帮助

这里的代码:

Error:Execution failed for task ':app:buildInfoDebugLoader'.
> Exception while loading build-info.xml : org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
    at com.android.utils.XmlUtils.parseUtfXmlFile(XmlUtils.java:514)
    at com.android.build.gradle.internal.incremental.InstantRunBuildContext.loadFromXmlFile(InstantRunBuildContext.java:626)
    at com.android.build.gradle.internal.incremental.BuildInfoLoaderTask.executeAction(BuildInfoLoaderTask.java:60)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:123)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:632)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:615)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:95)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:76)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.execute(DefaultTaskGraphExecuter.java:236) …
Run Code Online (Sandbox Code Playgroud)

java android saxparseexception

2
推荐指数
1
解决办法
2166
查看次数

异常处理:父类异常也会捕获子异常

SAXException由SAXNotRecognizedException,SAXNotSupportedException扩展 .

try {
  //do Something
} catch(SAXException e) {}
  catch(ParserConfigurationException pce) {}
Run Code Online (Sandbox Code Playgroud)

如果让我们说'做某事'有一些抛出的代码,SAXNotRecognizedException or SAXNotSupportedException如果发生这种情况,那么什么都不应该发生.如果发生SAXNotRecognizedException,那么因为它是一个空块,所以不会发生任何事情.同样适用于ParserConfigurationException.现在,即使我说没有为ParserConfigurationException做任何事情,也会抛出ParserConfigurationException的异常.

我基本上希望它在SAXNotRecognizedException or SAXNotSupportedException发生时什么都不做.

java sax exception-handling saxparser saxparseexception

1
推荐指数
1
解决办法
4349
查看次数

org.thymeleaf.exceptions.TemplateInputException:异常解析文档:template ="login",第36行 - 第3列

在更改原始源之前,我正在尝试访问wrapbootstrap.com模板的默认登录页面.在这个问题中解决了模板引擎的使用问题.

我的ViewResolver bean定义如下:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "b.c.m.h")
public class HConfiguration extends WebMvcConfigurerAdapter {

    @Bean
    public ViewResolver viewResolver() {
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setPrefix("/WEB-INF/html/");
        templateResolver.setSuffix(".html");
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver);

        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        return viewResolver;
    }
    (...)
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试访问login.html由以下定义的页面时:

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginPage() {
    return "login";
}
Run Code Online (Sandbox Code Playgroud)

而login.html页是:

<!DOCTYPE html>
<!--
Beyond Admin - Responsive Admin Dashboard Template build with …
Run Code Online (Sandbox Code Playgroud)

java spring saxparseexception thymeleaf

1
推荐指数
1
解决办法
1万
查看次数