当前位置: 首页 > 知识库问答 >
问题:

在验证时,我需要“异常”中的元素名。

邢寒
2023-03-14

这是java类文件。

import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
import org.xml.sax.SAXException;
import java.io.*;

public class Jaxp_1
{
public static void main(String [] args) throws Exception
{
Source schemaFile = new StreamSource(new File("xsd/img.xsd"));
Source xmlFile = new StreamSource(new File("xml/imgone.xml"));

SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();

try{
        validator.validate(xmlFile);
        System.out.println(xmlFile.getSystemId()+ " is valid");
        System.out.println();
    }
    catch (SAXException e) 
    {
        System.out.println(schemaFile.getSystemId() + " is NOT valid");
        System.out.println("Reason: " + e.getMessage());
    }
 }
 }
<?xml version="1.0" encoding="UTF-8"?>
<edge xmlns="http://www.example.org/img">
<image x="143.05" y="2" height="66" width="537"
    xhref="/dccp_repository/dam/other/images/insurance.jpg" id="Image_48"
    isLocked="false" rx="143.05" ry="2" rotation="0" />
</edge>

这是XSD文件。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/img"
xmlns:tns="http://www.example.org/img" elementFormDefault="qualified">
<element name="edge">
    <complexType>
        <sequence>
            <element name="image">
                <complexType>
                    <attribute name="x" type="int"></attribute>
                    <attribute name="y" type="int"></attribute>
                    <attribute name="height" type="int"></attribute>
                    <attribute name="width" type="int"></attribute>
                    <attribute name="xhref" type="string"></attribute>
                    <attribute name="id" type="string"></attribute>
                    <attribute name="isLocked" type="string"></attribute>
                    <attribute name="rx" type="double"></attribute>
                    <attribute name="ry" type="int"></attribute>
                    <attribute name="rotation" type="int"></attribute>
                </complexType>
            </element>
        </sequence>
    </complexType>
</element>
</schema>

我更改了属性的类型,如属性name=“x”type=“int”。我错误如下:

文件:/d:/maheshkumar.v/workspace/javaone/javaio/xsd/img.xsd无效原因:cvc-datatype-valid.1.2.1:“143.05”不是“integer”的有效值。

它不会在例外情况下显示元素名称。整数在哪里?它不指定'image'元素。

如果我有大型XML。如何识别错误?

共有1个答案

昌砚
2023-03-14

抛出的异常是SAXParseException,它是SAXException的子类。SAXException不能告诉您错误发生在哪里,但SAXParseException可以通过getLineNumber()和getColumnNumber()告诉您错误发生在哪里。它们不命名出错的元素,但允许您通过它在xml文件中的位置来标识它。行号和列号指向元素的结束标记。

您可以使用以下内容:

try{
    validator.validate(xmlFile);
    System.out.println(xmlFile.getSystemId()+ " is valid");
    System.out.println();
} catch (SAXParseException e) 
{
    System.out.println(schemaFile.getSystemId() + " is NOT valid");
    System.out.println("Reason: " + e.getMessage() 
         + " at line:" + e.getLineNumber() 
         + " at column:" + e.getColumnNumber() +".");
} catch (SAXException e) 
{
    System.out.println(schemaFile.getSystemId() + " is NOT valid");
    System.out.println("Reason: " + e.getMessage());
}
 类似资料:
  • 问题内容: 我有一个非常简单的persistance.xml文件: 而且有效。 但是,当我删除元素时,应用程序看不到实体(所有类都带有注释)。 是否有自动扫描类的机制? 问题答案: 您可以使用persistence.xml 。从Java EE 5教程中 : 该文件定义了一个名为的持久性单元,它使用JTA感知数据源。所述和元素指定管持久类:实体类,可嵌入类和超类映射。该元素指定JAR文件都包含持久化

  • 我正在尝试为我的组织实施OpenID Connect规范。我正在一个测试依赖方应用程序中使用微软的OpenID Connect的OWIN实现来验证我的协议实现。 我公开了以下元数据文档: 签名密钥公开为以下文档: 身份令牌是使用类及其关联的处理程序,使用类生成的。此代码代表令牌的构造方式,并将其作为响应数据的参数返回给调用系统。 当我试图将签名的令牌传递回依赖方应用程序时,OWIN中间件接受POS

  • 我试图自动化一个场景,条件是我必须选择所有下拉选项,然后逐个单击这些选项。我尝试了代码,但它只点击了第一个选项,。将错误显示为陈旧元素是不可点击的。请帮忙。

  • 我正在使用以下代码检索我的链接: 接下来,我呼吁: 然后 并且抛出过时的元素异常。 现在,考虑到,我本以为可以避免这个问题,但它仍然存在。 我很想在加载页面源代码后,将其放入lxml中,以完全避免这个问题。 建立和迭代链接之间的时间最多为一秒钟。 有没有其他人遇到过这样的问题,并找到了解决方案? 感谢您的指导。

  • 我正在测试带注释的javax验证。它们在应用程序中工作良好,方法参数上有注释。但是当我试图通过手动构建验证工厂来测试它们时 我得到以下错误。 javax。验证。ValidationException:HV000183:无法初始化“javax”。艾尔。“表达工厂”。检查类路径上是否有EL依赖项,或者改用ParameterMessageInterpolator 收到这个错误后,我在gradle文件中添