Java 从失败的XML获取元素

Java 从失败的XML获取元素,java,Java,我有一个大的xml文件要根据一个大的XSD进行验证。当出现验证错误时,客户要求我用不同的数据值填充一个表。例如,如果学生ID无效,我将显示学区、地区和学生ID。在XML的另一部分中,如果州无效,我将显示学校名称、州和地区。要显示的数据因无效数据而异。但它的两个或三个或四个元素是无效子元素的父元素,应该被提取 如何使用XMLSTREAMREADER和Validator提取数据 我尝试了这一个,我只能得到无效的元素,没有其他数据 public class StaxReaderWithElementI

我有一个大的xml文件要根据一个大的XSD进行验证。当出现验证错误时,客户要求我用不同的数据值填充一个表。例如,如果学生ID无效,我将显示学区、地区和学生ID。在XML的另一部分中,如果州无效,我将显示学校名称、州和地区。要显示的数据因无效数据而异。但它的两个或三个或四个元素是无效子元素的父元素,应该被提取

如何使用XMLSTREAMREADER和Validator提取数据

我尝试了这一个,我只能得到无效的元素,没有其他数据

public class StaxReaderWithElementIdentification {

private static final StreamSource XSD = new StreamSource("files\\InterchangeEducationOrganizationExension.xsd");
private static final StreamSource XML = new StreamSource("files\\InterchangeEducationOrganizationExension.xml");

public static void main(String[] args) throws Exception {
    SchemaFactory factory=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = factory.newSchema(XSD);

    XMLStreamReader reader = XMLInputFactory.newFactory().createXMLStreamReader(XML);
    Validator validator = schema.newValidator();
    validator.setErrorHandler(new MyErrorHandler(reader));
    validator.validate(new StAXSource(reader));

}
}
处理者是:

public class MyErrorHandler implements ErrorHandler {

private XMLStreamReader reader;

public MyErrorHandler(XMLStreamReader reader) {
    this.reader = reader;
}

@Override
public void error(SAXParseException e) throws SAXException {
    warning(e);
}

@Override
public void fatalError(SAXParseException e) throws SAXException {
    warning(e);
}

@Override
public void warning(SAXParseException e) throws SAXException {
    //System.out.println(reader.getProperty(name));
    System.out.println(reader.getLocalName());
    System.out.println(reader.getNamespaceURI());
    e.printStackTrace(System.out);
    }

}

是否有人可以帮助我在发生验证错误时如何提取其他数据?

我不确定这是否是最佳解决方案,但您可以尝试使用并实现一个自定义的解决方案

通过这种方式,您可以解析文档并只对您感兴趣的标记作出反应。无论XML/HTML有多无效,它都会对其进行处理